2012-03-04 16 views
19

我知道一個TcpClient是套接字類的包裝,如果使用TcpClient,我可以訪問底層套接字,但是封裝究竟做了什麼?通過Socket直接使用TcpClient有什麼好處?

當使用TCPClient時,我是否需要像調用套接字一樣繼續調用Receive(),或者封裝器是否確保所有數據都顯示?

最後,我可以使用TcpClient的服務器和客戶端包插座

回答

17

究竟是什麼包裝紙做的(使用的TcpListener接受服務器上的原始連接後)都對?

讓我來舉個例子來解釋一下。您在C#File.ReadAllLines中有方法。它讀取文件中的所有行。現在,您也可以通過FileStream類或任何其他讀取文件的類來實現相同的結果。但是,包裝函數(即File.ReadAllLines)允許您使用較少的代碼行實現相同的結果。包裝隨時增加通過抽象出底層細節

當使用的TcpClient我需要不斷的打電話,接收()像我這樣做 與插座或不包裝確保所有出現在我的數據生產力?

TCPClient沒有Receive方法類似Socket但這個想法是一樣的。你將不得不使用方法,如GetStream讀取數據就不會出現自動的爲你

我可以使用TcpClient的服務器和客戶端上包裹 插座

是,您可以安全地在客戶端和服務器端使用它

+0

啊我明白了。所以,我正確地說,相當於執行_BeginReceive(),接着是EndReceive(),存儲字節並再次調用BeginReceive(),直到socket_上的received_消息可以通過_myTcpClient.GetStream()來執行BeginRead()_在TcpClient上? BeginRead()不會調用EndRead()回調,直到收到指定的字節數爲止。 (刪除需要不斷調用BeginRead()/ BeginReceive(),直到接收到所有期望的字節) – Dermot 2012-03-04 09:17:42

+1

我寧願使用'NetworkStream'類的'Read'和'Write'方法而不是'BeginRead'和'EndRead'因爲你不必顯式調用'BeginRead'和'EndRead',包裝會爲你做。看到這樣的互聯網上的一些示例http://msdn.microsoft.com/en-us/library/system.net.sockets.tcpclient.getstream.aspx – 2012-03-04 10:22:26

+0

感謝您澄清,對我來說。 – Dermot 2012-03-04 10:46:21

相關問題