2010-03-03 474 views
0

我是新來的TCP編程所以這裏是幾個簡單的問題:C#TcpClient的連接和多線程

  1. 客戶端應用程序被調用的監聽器。 我打開與TcpClient的連接:

    TcpClient myTcp = new TcpClient("Server", 1000); 
    myTcp.connect(); 
    

    多久會myTcp保持聯繫嗎?有沒有默認值?我可以改變它嗎?

  2. 如果我的調用應用程序有多個線程(這是一個WCF服務),每個線程都必須調用一個監聽器。我可以創建myTcp作爲單例,並在多個線程中重用它嗎?

  3. 如果問題2是,可以同時處理多少個連接,myTcp可以處理?

  4. 使用單例方法是否有機會在調用和響應之間產生同步問題?

回答

2

只要服務器去,如果它是一個WCF服務,那麼WCF將照顧你的線程問題。您對服務的線程行爲有一定的控制權。但我懷疑這不是你問的。

在客戶端上,在技術上你可以訪問的TcpClient或插口從多個線程,但你無法讀取或併發寫它,以便對所有意圖和目的,沒有不嘗試分享跨線程的TcpClient除非你對同步鎖非常熟悉。

但是,爲什麼你使用TcpClient與WCF服務交談?爲什麼不使用WCF客戶端通道訪問它?

+0

謝謝你的迴應。我正在編寫WCF服務,它必須接受來自多個客戶端的請求,服務與收到的數據一起工作,然後必須調用第三方應用程序,獲得響應並將其發回給客戶端。客戶端WCF服務| WCF第三方應用程序|第三方應用程序WCF | WCFback客戶端。 WCF爲來自客戶端的每個請求創建一個新的TcpClient,在收到響應關閉TcpClient後,打開與第三方應用程序的連接。至於我的理解開放連接/關閉連接是耗時的,所以我想我如何打開連接並重用它的所有客戶端requiests。 – Michurin

+0

根據所使用的通道類型,如果您有客戶端代理(源自ClientBase )的實例,則可以在通道上調用打開以建立連接,關閉以關閉它。但同樣的警告適用。雖然你可以跨線程使用它,但你必須非常小心,不要同時這樣做。 – Josh

+0

對不起喬希,但我擔心你失去了我。據我瞭解,你說它不安全共享TcpClient用於調用客戶端調用WCF服務之間的第三方應用程序。我可以共享networkStream,還是不保存,以便同時爲WSF服務的兩個不同客戶端調用stream.write?謝謝! – Michurin