2011-07-23 5 views
4

Je suis en train d'obtenir un exemple simple WebSocket pour travailler sur ma machine (localhost), je suis JavaScript et C# en cours d'exécution très bien et la connexion, sauf que Chrome se déconnecte après poignée de main.Chrome débranche après WebSockets poignée de main

J'ai cherché toute la matinée et je pense qu'il a quelque chose à voir avec la même politique de domaine, comme une autre "question" suggère, j'ai mis à jour mon navigateur à la dernière version (12.xxx).

Cependant, je ne pouvais pas trouver une solution à mon problème.

J'utilise sur le côté C#:

ConnectionOrigin = "http://localhost:8080"; 
ServerLocation = "ws://localhost:8181/test"; 

Et je courais le JavaScript en utilisant un fichier HTML ouvert normal à partir du disque droit (file:/// dans la barre d'URL). J'ai aussi essayé d'utiliser XAMPP pour l'héberger localement mais j'ai toujours le même problème.

Attaché va la sortie du journal du programme C#:

New connection from 127.0.0.1:8181 requested. Handshaking ... 
Reading handshake ... 
GET /test HTTP/1.1 
Upgrade: WebSocket 
Connection: Upgrade 
Host: localhost:8181 
Origin: null 
Sec-WebSocket-Key1: R 506 I 2D }6 qFB G0`@88J? 4 
Sec-WebSocket-Key2: y 20 8403!24 L 5 8 

Sending handshake ... 
HTTP/1.1 101 Web Socket Protocol Handshake 
Upgrade: WebSocket 
Connection: Upgrade 
WebSocket-Origin: http://localhost:8080 
WebSocket-Location: ws://localhost:8181/test 


New connection from 127.0.0.1:8181 established. 
http://localhost:8080 
Data sent to the client ["Time at the server: 23-07-2011 12:57:27"] 
Client disconnected. 
Waiting for another connection attempt ... 
+1

Quel serveur WebSocket utilisez-vous? Quelle erreur obtenez-vous de Chrome (dans la console javascript de Chrome)? En outre, la valeur de prise de contact que vous affichez est pour la version Hixie-76 du protocole mais ils sont incomplètes comme indiqué. Le client doit envoyer 8 octets au hasard à la fin de la poignée de main. Le serveur doit renvoyer 16 octets basés sur key1, key2 et les 8 octets aléatoires du client. – kanaka

Répondre

5

En cas de cette demande:

GET /test HTTP/1.1 
Upgrade: WebSocket 
Connection: Upgrade 
Host: localhost:8181 
Origin: null 
Sec-WebSocket-Key1: R 506 I 2D }6 qFB G0`@88J? 4 
Sec-WebSocket-Key2: y 20 8403!24 L 5 8 

la réponse doit être :

HTTP/1.1 101 WebSocket Protocol Handshake 
Upgrade: WebSocket 
Connection: Upgrade 
Sec-WebSocket-Origin: null 
Sec-WebSocket-Location: ws://localhost:8181/test 

the response code here 

Alors:

  • Il est WebSocket et non Web Socket dans la première ligne.
  • C'est Sec-WebSocket-... et non WebSocket-....
  • Vous n'avez pas inclus le code de réponse qui est la partie essentielle de la prise de contact (dont la construction est décrite dans the specs).
  • En outre, vous devez utiliser \r\n et non \n (au cas où vous ne l'avez pas déjà fait).

Sur une note de côté, vous pouvez consulter chrome://net-internals/ (l'onglet Events puis chercher le approprié SOCKET_STREAM) pour voir quelle réponse Chrome effectivement reçu.

Questions connexes