2011-08-24 10 views
1

我一直在嘗試設置一個Unity3D組件來與一個Javascript客戶端協商一個WebSocket連接。在C#中談判一個WebSocket(Chrome連接到Unity C#TCP客戶端)

我有一個線程化的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)) 

任何生成響應幫助你可以給予不勝感激?

+0

WebSocket協議仍在發展之中,我懷疑的例子是一個「舊(ER)」草案......還有對瀏覽器版本的依賴性過(因爲不同的瀏覽器版本實現不同版本草案) – Yahia

+0

我相當肯定我有規範的正確版本,我正在處理00版本。使用Chrome 13(14將採用一種新的規範一旦釋放顯然) – Kimau

+0

如果你正在處理的00,然後將其錯誤/鉻13實現03又名V76 - 見http://stackoverflow.com/questions/4878830/which-version-的-的WebSockets協議草稿,並-谷歌 - 鉻 - 執行/ 4879388#4879388 – Yahia

回答

2

Opera會(如果您在opera:config中啓用websockets)記錄在錯誤控制檯中拒絕連接的原因,這有助於調試問題出在哪裏(如果是挑戰或錯誤頭或錯誤起源等) )。

但我懷疑這裏真正的問題是,你是從file:///進行測試,Chrome不喜歡這樣。

+0

今晚要試一試,如果它再次出現權限錯誤,這將是我第三次失去開發Chrome權限的日子錯誤:'( – Kimau

0

我在Freenode上的#WhatWG頻道上與一些人討論過這個問題(所以我不能拿信譽),我們想知道爲什麼起源爲空。也許Chrome有一個安全實現,不允許來自空白源的連接(例如使用file:///)。

建議您嘗試Opera 11.00或更高版本,以查看Chrome是否存在此處的錯誤或某種安全模式不允許使用此功能。