2011-12-12 145 views
0

我正在使用C#WebSocket服務器(當前由http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-17支持)。 服務器正在使用.NET的Socket對象來讓服務器偵聽併爲每個客戶端發送和接收消息。WebSocket服務器,由遠程主機強制關閉的連接

我構建了一個連接到服務器的Web客戶端,它可以連接成功,我可以在客戶端之間發送消息。

一切都很好!

現在,如果我連接到服務器並使其保持客戶端的同時不發送郵件時,服務器拋出,上面寫着一個例外:

的Int32發送(字節[],的Int32,的Int32, System.Net.Sockets.SocketFlags):一個 現有連接被遠程主機強制關閉。

唯一的例外,因爲你可以看到的是從服務器的客戶端套接字的發送方法,這是看起來很有線,因爲我沒有從客戶端,並沒有一個將數據發送到該客戶端發送的任何數據回到那裏怎麼可能發送方法可以拋出一個異常,爲什麼這個異常拋出?

+0

您可以發送發送代碼(特別是引發異常的行)嗎? – spender

+0

...另外,你是否知道WebSockets將直接支持.Net4.5? – spender

+0

是的,我知道在.Net 4.5中的WebSocket,但我不知道它什麼時候會發布。 – udidu

回答

0

它被稱爲超時!

WebSockets只是TCP/IP原始套接字(.NET中的Socket類)的封裝 - 如果沒有發送任何超時,並且沒有任何內容保持連接活着。

AFAIK目前WebSocket API並沒有很好的定義,只要如何保持連接活着。我遇到同樣的情況,不得不切換到使用ping(空消息)來保持連接活着(我正在使用Microsoft套接字實現)。

如果您對於非最終規格的reinventing the wheel,請記住,每當規範發生變化時,您都必須不斷重新創建它。我特別選擇使用Microsoft套接字預覽,以便在發佈時我幾乎不需要更改任何代碼。我不會在IIS中運行 - 我作爲控制檯應用程序運行,目前它的運行狀況非常好,但我的用戶非常少。

注意:我遇到的問題導致我發現這個問題,如果我發送10條消息而沒有收到回覆,則連接關閉。我仍在研究這是爲什麼 - 無論它是WebSockets的缺陷/功能還是Socket類的一個特性。有可能我達到了65kb的限制,但我的信息很小,我不認爲這是爲什麼。在測試你正在工作的任何東西時要注意這一點,因爲它給出了你得到的同樣的錯誤。

0

我假設你已經排除了服務器和客戶端之間不同協議的使用(愚蠢的假設,但你永遠不知道)。

如果您的代碼沒有事先從客戶端接收到達發送方法,那麼顯然服務器代碼有問題。使用追蹤和/或日誌獲取更多的信息,即使對於abc的進入等待接收,接收,接收,退出接收等。

+0

「如果您的代碼沒有事先從客戶端接收到達發送方法,那麼顯然服務器代碼有問題」。我已經知道了......並且我所做的日誌會將我引導至我收到的錯誤消息。 – udidu

+0

您可以將您的日誌記錄擴展爲上述的abc。 – 2011-12-12 19:01:07

+0

你是什麼意思abc的? – udidu

相關問題