Согласование WebSocket в C # (подключение Chrome к TCP-клиенту Unity C #) - PullRequest
1 голос
/ 25 августа 2011

Я пытался настроить компонент Unity3D, который согласовывает соединение WebSocket с клиентом Javascript.

У меня есть многопоточный TCPListener (c #), который обрабатывает HTTP-запрос и пытается согласовать рукопожатие, хотя оно, похоже, молча терпит неудачу. Клиент закрывает соединение вскоре после того, как я отправил свой ответ.

Я следовал инструкциям на этом сайте: http://deusty.blogspot.com/2010/09/websocket-draft-76-algorithm-example.html

Вот журнал Сокетов

ws://localhost:3000/serverStart

Start Time: Wed Aug 24 2011 23:32:54 GMT+0100 (GMT Daylight Time)

t=1314225174926 [st=   0] +REQUEST_ALIVE             [dt=1038]
t=1314225174926 [st=   0]    +SOCKET_STREAM_CONNECT  [dt= 999]
                          --> url = "ws://localhost:3000/serverStart"
t=1314225174927 [st=   1]       +PROXY_SERVICE       [dt=   0]
t=1314225174927 [st=   1]           PROXY_SERVICE_RESOLVED_PROXY_LIST  
                                --> pac_string = "DIRECT"
t=1314225174927 [st=   1]       -PROXY_SERVICE       
t=1314225174927 [st=   1]       +PROXY_SERVICE       [dt=   0]
t=1314225174927 [st=   1]           PROXY_SERVICE_RESOLVED_PROXY_LIST  
                                --> pac_string = "DIRECT"
t=1314225174927 [st=   1]       -PROXY_SERVICE       
t=1314225174927 [st=   1]        HOST_RESOLVER_IMPL  [dt=   2]
                             --> source_dependency = {"id":455371,"type":7}
t=1314225175925 [st= 999]    -SOCKET_STREAM_CONNECT  
t=1314225175926 [st=1000]     WEB_SOCKET_SEND_REQUEST_HEADERS  
                          --> GET /serverStart HTTP/1.1
                              Upgrade: WebSocket
                              Connection: Upgrade
                              Host: localhost:3000
                              Origin: null     
                              Sec-WebSocket-Key1: 52 18  5w7 9       9 2c
                              Sec-WebSocket-Key2: a2PA tG8 1>7242<6(yj7I2

                              \x78\x15\xbc\x75\x2d\x54\x3b\xea
t=1314225175926 [st=1000]     SOCKET_STREAM_SENT     
t=1314225175963 [st=1037]     SOCKET_STREAM_RECEIVED  
t=1314225175963 [st=1037]     WEB_SOCKET_READ_RESPONSE_HEADERS  
                          --> HTTP/1.1 101 WebSocket Protocol Handshake
                              Upgrade: WebSocket
                              Connection: Upgrade
                              Sec-WebSocket-Origin: null
                              Sec-WebSocket-Location: ws://localhost:3000/serverStart
                              Sec-WebSocket-Protocol: webpad

                               \x20\xc3\xc3\xf6\xad\xd2\x76\x63\x48\x86\x0c\xd2\xa6\xb1\x06\x72
t=1314225175963 [st=1037]     SOCKET_STREAM_RECEIVED  
t=1314225175963 [st=1037]     SOCKET_STREAM_RECEIVED  
t=1314225175964 [st=1038] -REQUEST_ALIVE             

Я генерирую ответ, используя следующий алгоритм

response = MD5( bitpack(
             Key1(numbers only / num of spaces), 
             Key2(numbers only / num of spaces), 
             RequestBody))

Любая помощь, которую вы можете оказать, будет высоко ценится?

Ответы [ 2 ]

2 голосов
/ 25 августа 2011

Opera будет (если вы включите веб-сокеты в opera: config) записывать причину отказа в соединении в консоли ошибок, что полезно для отладки там, где есть проблема (если это вызов, либо опечатанный заголовок, либо неверный источник и т. Д.).

Но я подозреваю, что реальная проблема здесь в том, что вы тестируете из файла: ///, а Chrome это не нравится.

0 голосов
/ 25 августа 2011

Я обсуждал это с некоторыми людьми на канале #WhatWG на Freenode (поэтому я не могу взять кредит), и мы задавались вопросом, почему источник нулевой. Возможно, в Chrome реализована реализация безопасности, которая запрещает соединения с нулевым источником (например, с помощью file: ///).

Было предложено попробовать Opera 11.00 или более позднюю версию, чтобы узнать, есть ли здесь ошибка в Chrome или какая-то модель безопасности, которая это запрещает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...