Gibt es einen Weg, um eine tcp-Verbindung zu einer IP-Adresse mit javascript?
Lassen Sie mich Ihnen ein wenig hintergrund auf, was ich versuche zu erreichen.
Ich habe ein Gerät(chip-und pin-Terminal), dass eine lokale IP-Adresse, Es wurde programmiert, um bestimmte Daten und verarbeiten.
Beispiel: ich sende den string "05"
im hex "30 35"
und das terminal liest und dann neu starten.
Habe ich versucht, mit SockJS-Client sowie die eingebaute WebSockets.
Jedoch mit Websockets ich merke, dass der browser sendet:
GET / HTTP/1.1
Host: IP:PORT
Connection: Upgrade
Pragma: no-cache
Cache-Control: no-cache
Upgrade: websocket
Origin: MYIP
Sec-WebSocket-Version: 13
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-US,en;q=0.8
Sec-WebSocket-Key: A1CeTMFnQCZv4GNZbLFnyQ==
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits
Wenn mein code sieht wie folgt aus:
var exampleSocket = new WebSocket("ws://IP:PORT");
exampleSocket.send("05");
Wenn ich den code so:
var exampleSocket = new WebSocket("wss://IP:PORT");
exampleSocket.send("05");
Bekomme ich nur 3 tags gesendet werden: SYN(0x0016) ETX(0x0003) SOH(0x0001)
Ich bin mir jetzt nicht sicher, ob Sie brauchen, um einen WebSocket-Server in der Lage sein zu interpretieren, die eingehenden Daten.
SockJS tut die gleiche Sache, indem Sie zusätzliche Informationen über sich selbst und die broswer:
GET /info?t=1452272641278 HTTP/1.1
Host: IP:PORT
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36
Origin: MYIP
Accept: */*
Referer: MYIP
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-US,en;q=0.8
Also ich denke, meine Frage ist. Gibt es eine Möglichkeit, nur senden genau das, was ich will? ohne irgendwelche zusätzlichen Daten?
Ich habe dies in Objective-C sowie C#, ich bin nur nicht sicher, ob javascript kann dies tun?
Bitte Fragen wenn etwas unklar ist und ich werde versuchen das zu klären.
- Warum ist es wichtig, die Verbindung mit dem lokalen Netzwerk-Gerät per JS? Wäre es nicht möglich, dies zu tun auf dem server und führen Sie die Transaktion über AJAX-events?
- Wählen Sie eine andere Sprache, nur etwa JEDER anderen Sprache, und seine relativ einfache, aber (browser) JavaScript einfach nicht vom design. Sonst wäre es ein Kinderspiel, um die Durchführung reflektiert Angriffe.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Kann man nicht machen, einen einfachen TCP-Verbindung von Javascript im browser, das Ihnen erlaubt, Daten zu senden, in dem Sie Ihre eigenen Daten format oder Protokoll. Die browser einfach nicht unterstützen.
Es nur Ihnen erlaubt, um Ajax-Anfragen und WebSocket-verbindungen. Sowohl Ajax und WebSocket-requests start in das Leben als HTTP-request. Im Fall der webSocket request, das HTTP-request kann dann "aufgerüstet" das webSocket-Protokoll, nachdem sich beide Seiten einig, aber die ersten Daten an den server gesendet wird, eine juristische HTTP-request. Sie können sehen, diese MDN Referenz für einen gesamten überblick darüber, wie das webSocket-Protokoll funktioniert von der Verbindung zum tatsächlichen Paket-format. Auch wenn es ein Upgrade auf das webSocket-Protokoll, dann muss die Nutzung der webSocket framing format für alle Daten, die beschrieben wird hier.
Hier ist ein überblick von dem webSocket-Daten-frame-format:
So, es sei denn, Ihr Endpunkt spricht HTTP oder webSocket-Protokoll, Sie können direkt vom browser Javascript.
Was Sie sehen, in Ihrer Frage, wie die anfänglichen HTTP-Anforderung ist die Anfänge einer webSocket-Verbindung. Das ist, wie es funktioniert.
Wenn Sie Javascript in einer nicht-browser-Umgebung wie node.js Sie können verwenden Sie die "net" - Modul zum erstellen eines einfachen TCP-socket, die Sie dann verwenden können, was auch immer-Protokoll, die Sie wollen mit.
Ich fand schließlich eine Lösung.
Was ich tun musste, war eine windows-Anwendung erstellen, die fungiert als ein websocket-server.
Bei der Installation des Programms wird ein URI-Schema, um der Lage sein, sich selbst aus einem link wie
myapp://start
Hier ist der code zum Bearbeiten der Registrierung zum hinzufügen einer benutzerdefiniertes URI-Schema:
Dann im browser aufrufen, die url, die das Programm startet.
Die websocket erstellt erhalten und senden Sie es an den localhost:port-server-Programm ausgeführt wird.
Dem windows-Programm wird alles tun, um die Daten dann schicken Sie es als raw-tcp/ip-bytes zum terminal.
Wenn sich das terminal sendet Daten zurück an das windows-Programm, das windows-Programm wird dann nach vorne, zurück, um den websocket zum browser, um mit den Informationen umgehen.
Dem windows-Programm dann tötet alle verbindungen anzeigen und beenden.
Haben Sie versucht, zu verwenden, wie diese:
hoffe ich konnte weiterhelfen!