2016-11-08 6 views
0

Ich sende benutzerdefinierte Web-Socket-Frames vom Server zum Client. Ich schaffte es, nahtlos Handshake zu bekommen, aber das Senden von normalen Textrahmen verursacht Probleme (die Nachricht auf der Client-Seite wird nicht empfangen). Dies ist, was ich sende:WebSocket-Server: Senden von Textrahmen an den Client

Die Daten werden korrekt gesendet (Handshake funktioniert und jj hat den Wert 6). Ich habe meinen Code auf der hier gefundenen Erklärung How can I send and receive WebSocket messages on the server side? basiert.

Mein Kunde ist ganz einfach und ich bin Entsendung nur für die Fertigstellung:

<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
    <title>Web Socket Example</title> 
    <meta charset="UTF-8"> 
    <script type="text/javascript"> 

     var webSocket = new WebSocket("ws://localhost:48884/", "sample"); 
     webSocket.binaryType = "arraybuffer"; 
     webSocket.onopen = function(e) { alert("opened"); } 
     webSocket.onclose = function(e) { alert("closed"); } 
     webSocket.onerror = function(e) { alert("error"); } 
     webSocket.onmessage = function(e) { alert("got: " + e.data); } 

    </script> 
    </head> 
    <body> 
     <div id="holder" style="width:600px; height:300px"></div> 
    </body> 
</html> 

Die Web-Socket-Version, die ich vom Client erhalten ist 13.

Irgendwelche Ideen, warum Händedruck gearbeitet und normalem Text doesn‘ t?

+0

Welche Sprache verwenden Sie für den Server? In welcher Sprache erwarten Sie die Antwort? Woher weißt du, dass der Handschlag funktioniert hat? Was hast du bisher versucht? – Myst

+0

Ich möchte, dass der Handshake funktioniert, denn als ich den Client laufen ließ, wurde ich alarmiert ("geöffnet"). Ich benutze C++, aber das ist irrelevant. – maxest

+0

Ein Follow-up. Ich habe das gerade im Internet Explorer (früher verwendeter Firefox) überprüft. Auf IE werde ich geöffnet, aber dann geht sofort Fehler (undefiniert) und geschlossen. – maxest

Antwort

0

Ich habe das Problem behoben. Es funktioniert jetzt, weil sich herausstellt, dass am Ende des Handshakes (https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API/Writing_WebSocket_servers) zusätzliche \ r \ n notwendig waren. Mein Handshake war also nicht korrekt, aber irgendwie hat Firefox ihn akzeptiert (aber dann keine Nachrichten akzeptiert).

Wie auch immer, die Verbindung, die ich oben gepostet sagt, dass das Handshake-Format sein sollte:

HTTP/1.1 101 Switching Protocols 
Upgrade: websocket 
Connection: Upgrade 
Sec-WebSocket-Accept: key 
empty line 

ich zu diesem Format entsprochen und es dann alles funktionierte auf Firefox und IE in Ordnung aber nicht auf Chrome. Ich fand heraus, dass es auf Chrome funktioniert Ich muss auch das Protokoll angeben:

HTTP/1.1 101 Switching Protocols 
Upgrade: websocket 
Connection: Upgrade 
Sec-WebSocket-Accept: key 
Sec-WebSocket-Protocol: my_protocol_name 
empty line 

Das Handshake-Format oben hat mich Händedruck und Server-zu-Browser-Nachricht sendet der Arbeit an Firefox, IE und Chrome

Verwandte Themen