2015-05-27 54 views
0

我'要達到C的一個開源的cometd庫,才能夠勉強任何設備上運行的cometd客戶端後,400錯誤。服務器讓HTTP的WebSocket握手請求

的Long_Polling技術握手,並與服務器進行通信已經完成,因此在邏輯上我得給WebSocket的選項給用戶。

所以我拿來國米Web和撞到了NoPoll庫,幫助我出去WebSocket的一部分。

由於NoPoll現在我可以到達服務器敲他的門,但是當我嘗試用它來握手,我總是得到這個400錯誤:

這是我握手:

GET ws://m.zpush.ovh:8080/str/strd HTTP/1.1 
Host: m.zpush.ovh:8080 
Upgrade: websocket 
Connection: Upgrade 
Sec-WebSocket-Extension: permessage-deflate;client_max_window_bits 
Sec-WebSocket-Key: Z0WLawAAAADGI3syAAAAAA== 
Origin: null 
Cookie: BAYEUX_BROWSER=56a9-mchhnynonz6ji8a6hs1sh49; JSESSIONID=8gz8e00htqrl15vcm3o9yi95f 
Sec-WebSocket-Version: 13 

這裏是碼頭錯誤:

WARN:oejh.HttpParser:qtp1213415012-14: badMessage: 400 for [email protected]{r=0,c=false,a=IDLE,uri=-} 

所以,我再次得到了CYBERNET但我沒有發現任何關於它的線索。 從我讀的碼頭通常給出更準確的錯誤信息,但你會同意這一個是非常模糊的。

它不告訴我爲什麼,我應該修復什麼來實現握手。但我懷疑我缺少HandShake格式的東西。

,我不知道的另一件事是,它說:「HttpParser」但我'找一個WebSocket的握手。

任何光上這將是大加讚賞,並一如既往當我得到一個答案我正確地使用給定的答案,以幫助他人開發者和給他們一些代碼站在稍作教程。

PS:如果需要的話,我可以在GitHub上上傳我的代碼。

謝謝你的時間。

回答

1

很可能您的服務器配置錯誤,不支持WebSocket。

我建議你啓動的cometd演示服務器像解釋here,並嘗試你的C客戶端對抗。

我剛剛嘗試過您的升級請求(只是替換了主機名和端口),它工作得很好。

+0

一如既往地感謝您的快速回答。關於服務器配置錯誤,我完全可以這麼說,但我對此表示懷疑,因爲它與Java和JavaScript一起工作良好,是否與來自C客戶端的請求有區別?因爲我通過Tcp協議發送我的握手而不是http。感謝您的時間。 –

+0

我使用telnet通過TCP測試了您的升級,並且您只能通過TCP發送HTTP請求,所以如果您做得對,語言不是問題。 – sbordet