2013-02-21 64 views
1

我有一個異步服務器運行此MSDN article的稍微修改版本。這一次只允許一個客戶端加入。我應該打開和關閉每個事務的套接字嗎?

我的問題是,我可以打開和關閉每個事務(它使用TCP)的套接字嗎?如果我允許多個客戶端加入(通過修改代碼來偵聽更多的客戶端),似乎有些消息是交叉連接的。例如,如果我嘗試從兩臺客戶機的服務器上下載文件,則無論哪個客戶機最後一次啓動都會獲取該文件,並且第一次啓動該文件。或者,如果我開始從一個客戶端發送一些數據,然後從另一個客戶端開始,服務器收到了兩者的混合。由於我的程序不需要高性能(就像遊戲一樣),每個事務打開/關閉套接字是否有任何問題,或者是否有更好的方法來處理多個客戶端?

編輯 - 我忘記提到監聽器本身在整個生命週期中都會保持打開狀態,但每個客戶端都會爲事務本身打開和關閉一個新的套接字。在MSDN鏈接的代碼中,變量是「處理程序」。

回答

3

打開和關閉套接字有開銷,所以簡短答案是否定的(在聆聽端)。儘管如此,如果您不擔心這一點,那麼使用任何作品都是最佳做法。

當涉及到客戶端的套接字使用真正取決於您計劃發送數據的頻率。如果很少,那麼短時間打開套接字可能是常態。如果您注意到任何類型的「串擾」,這很可能是由於代碼中的錯誤。對於某些引用,請在MSDN上籤出TcpClient和TcpListener類。

+0

HTTP如何管理而不會造成開銷? – 2013-02-21 19:07:36

+0

套接字(用於收聽)通常在應用程序的整個生命週期中保持打開狀態,例如,對於端口80上是TCP套接字的HTTP。每個連接的客戶端基本上都存在於它自己的「會話」中。 – MarcF 2013-02-21 19:10:17

+0

我相信他離開了聽筒打開,如果我不明白這個問題是錯的,他說的是打開和關閉客戶端插座 – 2013-02-21 19:12:23

相關問題