2014-11-02 35 views
2

我將創建多個同步客戶端。我需要關於下面的代碼的一些解釋。 當我創建一個像下面這樣的套接字並調用連接網絡層發生的事情時。同步多套接字客戶端澄清

我相信當我們創建一個套接字並調用connect時,TCP/IP連接將在客戶套接字和服務器套接字之間建立一條隧道。

一旦此發件人(套接字)連接到服務器,該客戶端&服務器之間將有一個唯一的隧道。 如果我創建另一個客戶端,它將在它們之間有另一個唯一的隧道。

萬一如果我們得到一個錯誤,客戶端沒有連接,總是我們應該使用現有的套接字(發送者)重新連接,那麼我們將訪問我們有相同的數據/連接。 我們不應該創建一個新的套接字,然後我們將有一個新的隧道,我們將丟失以前的連接和數據。

Socket sender = new Socket(AddressFamily.InterNetwork, 
           SocketType.Stream, ProtocolType.Tcp); 
sender.Connect(remoteEndpoint) 

請說明是否我錯了。

回答

1

你稱之爲隧道真的叫做連接。斷開的連接不能恢復。數據丟失是可以預料的。

當您重新使用現有的套接字對象再次連接時,您正在創建一個新的連接。不推薦重複使用套接字對象(我自己),因爲它很混亂。

請注意,TCP不知道套接字是什麼。該規範不包含該詞。套接字是操作系統級別的東西。

+0

我有幾個問題。 1.我們應該嘗試只在初始階段失敗時重新連接套接字(在創建套接字對象之後)2.我正在創建單獨的套接字對象,以便在客戶端使用不同的線程提供不同的請求。然後,服務器如何知道應該向哪個客戶端發送數據。因爲所有的客戶端都有相同的端點。 – user3597233 2014-11-02 17:41:33

+0

我不明白你的意思是(1)。關於(2):只要保留對適當套接字對象的引用並在其上發送和接收即可。操作系統負責其餘部分。 – usr 2014-11-02 17:54:31

+0

還有一個問題,所以我的(2)點是正確的,我應該爲每個請求創建新的套接字。 – user3597233 2014-11-02 18:57:28