Let me give a little background on what I am trying to accomplish.
I have a device(chip and pin Terminal) that has a local IP address, It has been programmed to rece
You cannot make a plain TCP connection from Javascript in a browser that will allow you to send data in your own data format or protocol. The browser simply does not support that.
It only allows you to make Ajax requests and WebSocket connections. Both Ajax and WebSocket requests start life as an HTTP request. In the case of the webSocket request, the HTTP request can then be "upgraded" to the webSocket protocol after both sides agree, but the initial data sent to the server will be a legal HTTP request. You can see this MDN reference for a whole outline of how the webSocket protocol works from connection to actual packet format. Even once it is upgraded to the webSocket protocol, then it must use the webSocket framing format for all data which is described here.
Here's an outline of the webSocket data frame format:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-------+-+-------------+-------------------------------+
|F|R|R|R| opcode|M| Payload len | Extended payload length |
|I|S|S|S| (4) |A| (7) | (16/64) |
|N|V|V|V| |S| | (if payload len==126/127) |
| |1|2|3| |K| | |
+-+-+-+-+-------+-+-------------+ - - - - - - - - - - - - - - - +
| Extended payload length continued, if payload len == 127 |
+ - - - - - - - - - - - - - - - +-------------------------------+
| |Masking-key, if MASK set to 1 |
+-------------------------------+-------------------------------+
| Masking-key (continued) | Payload Data |
+-------------------------------- - - - - - - - - - - - - - - - +
: Payload Data continued ... :
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
| Payload Data continued ... |
+---------------------------------------------------------------+
So, unless your endpoint speaks HTTP or the webSocket protocol, you cannot connect directly to it from browser Javascript.
What you are seeing in your question as the initial HTTP request is the beginnings of a webSocket connection. That's how it works.
If you use Javascript in a non-browser environment such as node.js, you can use the the "net" module to create a plain TCP socket which you can then use whatever protocol you want with.
I eventually found a solution.
What I had to do was create a windows application that will act as a websocket server.
When installing the program it will create a URI Scheme to be able to call itself from a link like myapp://start
Here is the code to edit the registry to add a custom URI Scheme:
static void Main(string[] args) {
try {
// SET PATH OF SERVER
String path = Environment.GetCommandLineArgs()[0];
// GET KEY
RegistryKey key = Registry.ClassesRoot.OpenSubKey("myApp");
// CHECK FOR KEY
if (key == null) {
// SET KEY
key = Registry.ClassesRoot.CreateSubKey("myApp");
key.SetValue(string.Empty, "URL: myApp Protocol");
key.SetValue("URL Protocol", string.Empty);
// SET COMMAND
key = key.CreateSubKey(@"shell\open\command");
key.SetValue(string.Empty, path + " " + "%1");
//%1 represents the argument - this tells windows to open this program with an argument / parameter
}
// CLOSE
key.Close();
} catch (Exception ex) {
Console.WriteLine(ex.Message);
Console.ReadKey();
}
}
Then in the browser it will call that url which starts the program. The websocket will get created and send it to the localhost:port server program that is running.
The windows program will do everything to get the data then send it as raw tcp/ip bytes to the terminal. Once the terminal sends data back to the windows program, the windows program will then forward that back to the websocket for the browser to handle the information.
The windows program then will kill all connections and quit.
Have you tried to use like this:
var exampleSocket = new WebSocket('wss://IP:PORT', ['soap', 'xmpp']);
// When the connection is open, send some data to the server
exampleSocket.onopen = function () {
exampleSocket.send('05');
};
// Log errors
exampleSocket.onerror = function (error) {
console.log('WebSocket Error ' + error);
};
// Log messages from the server
exampleSocket.onmessage = function (e) {
console.log('Server: ' + e.data);
};
hope I could be helpfull!