2011-04-07 81 views
1

我想在Delphi6上使用草案hixie-76構建一個websocket服務器,我有一個握手問題。我想做一個與delphi6 websocket握手

的MD5指紋我與三個部分得到似乎不正確當我嘗試它,但是當我使用相同的algorythm與在protocole規範我得到了很好的MD5響應給出爲例...

我正在這樣處理,將key1中的數字除以32位字中的空格數,與key2相同,最後加上最後8個字節(key3),得到一個128位的字符串,我將其用作md5條目。

使用155712099,173347027的鍵1和鍵2和「以舊換新[K T2U」的KEY3,我得到正確的MD5指紋,所以我不明白爲什麼這個算法中不會給一個正確的指紋給客戶

這裏是我所收到的爲例:

GET/HTTP/1.1 
Upgrade: WebSocket 
Connection: Upgrade 
Host: localhost:8018 
Origin: null 
Sec-WebSocket-Key1: 4 102(2 6U 2 3 18 
Sec-WebSocket-Key2: 69V86`6t)e 0 2  42 


M]Rzÿõ& 

和握手我給響應

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


µ&Mq˜8èõÙZÙ,hœi 

Maybye有一個與我的反應,但雷爾另一個probleme似乎我的md5指紋有問題。

有沒有人看到我的錯誤在哪裏?

在此先感謝您的幫助

更新

我已經看到了這個單位,但除非我的閱讀很差勁,這個類的握手部分不計算任何MD5校驗,我認爲它使用協議的舊版本,而不是當前(76)

當我看下面的代碼,我看到答案寫入沒有任何MD5響應。

`嘗試 //讀取請求標頭 HandshakeRequest:= TWebSocketRequest.Create(ServerConnection);

// Send response headers 
ServerConnection.WriteLn('HTTP/1.1 101 Web Socket Protocol Handshake'); 
ServerConnection.WriteLn('Upgrade: WebSocket'); 
ServerConnection.WriteLn('Connection: Upgrade'); 
ServerConnection.WriteLn('WebSocket-Origin: ' + HandshakeRequest.Origin); 
ServerConnection.WriteLn('WebSocket-Location: ws://' + HandshakeRequest.Host + '/'); 

// End handshake 
ServerConnection.WriteLn; 
ServerConnection.WriteLn; 

HandshakeResponseSent := True; 

除了 在E:TWebSocketHandshakeException做 開始 //關閉連接,如果握手失敗 ServerConnection.Disconnect; 結束;`

再次感謝

更新2011年4月14

我終於發現問題出在哪裏了......

我是建設一樣,我的迴應:

resp := [...] +'Sec-WebSocket-Origin: '+ origin + #13#10 +
#13#10#13#10 +
md5response;
所以有3個0x0D 0x0A而不是2個md5指紋前...

因爲我不能回答我自己的問題,我將無法標記它解決,但它是!:)

+0

歡迎堆棧溢出!如果您需要在答案下添加更多不適合作爲評論的信息,請修改您的問題。 – 2011-04-10 21:30:30

回答