2013-06-18 64 views
5

我試圖接近尾聲包從我的服務器發送到我的客戶人爲,什麼原始值應該我送這樣的客戶會明白,我關閉連接?它不同於websocket協議?的WebSocket關閉分組

+0

客戶端=? – dtb

+0

這是因爲http://stackoverflow.com/questions/17175016/alchemy-forcefully-disconnect-client – Amy

+0

http://msdn.microsoft.com/en-us/library/system.net.websockets.websocket同樣的問題.closeasync.aspx似乎是合適的。請顯示你的嘗試和什麼不適合你。 –

回答

7

在最簡單的級別 - 只需關閉連接 - 這將工作正常。

的非常早期hixie-76具有用於信令閉合一個簡單的序列:只發送兩個字節0xFF時,0×00(第一個是幀類型,第二個是長度)。

在所有以後的規格,幀是更復雜一點;它們被分解爲:

  • (1個字節)的標誌和操作碼
  • (字節變量數)屏蔽標誌和有效載荷長度
  • (可選,4個字節)掩模
  • ({長度}字節)有效載荷

對於第一部分,我們想要的操作碼是0x08,並且這必須與「fin」標誌,0x80(這只是表示該幀沒有被拆分成多個消息)組合 - 所以0x88。對於第二部分,我們可以使用零長度消息,但是我們需要知道我們是客戶端到服務器(總是被屏蔽的,所以我們需要使用0x80)或者服務器到客戶端(從來不會蒙面,所以我們需要使用0x00)。

第三部分是如果掩模標記被設置,所以客戶機到服務器包括在內;由於我們沒有發送有效載荷,所以發明加密安全掩碼沒有意義 - 我們可以使用0x00 0x00 0x00 0x00。

第四,因爲我們說明零長度被省略。

所以:客戶端到服務器:均爲0x88 0x80的0×00 0×00 0×00 0×00

和服務器到客戶端:均爲0x88爲0x00

+0

我確實有訪問原始協議層,我目前使用'process.context.Send(new字節[4] {80,01,00,00},真實,TRUE);',它似乎不同之處在於,收到'WebSocket連接到發揮最佳 'WS://本地主機:8000 /' 失敗:壓縮位必須如果沒有協商的deflate-frame擴展錯誤,則爲0。 – user2498443

+0

@user我同意它;你從哪裏得到價值80?這是rsv1和rsv3集,操作碼爲零。你需要發送操作碼8的fin位設置 - 小數136? (完成在我的腦海 - 我沒有檢查過這個值) –

+1

對不起,協議不同嗎?我沒有訪問連接,我在C#中使用Alchemy,並且愚蠢地他們沒有終止連接的方法。感謝所有幫助的人! :) – user2498443