我一直認爲TcpClient可以簡化我的網絡應用程序中的套接字操作。從數據讀取TcpClient劣於套接字
但是,似乎TcpClient需要知道應該從底層套接字讀取多少數據。它看起來像TcpClient.GetStream(..)。Read(..)調用Socket.Receive(..)它讀取指定的字節數。
TcpClient暴露NetworkStream,這可能是相當煩人的處理。類似於終止字符串的東西以及不可靠的DataAvailable屬性使讀取未知TCP「數據包」變得複雜。
使用Socket.ReceiveFrom(..)似乎更「面向數據包」。
我通常使用TcpClient的綁定和握手等等,而對閱讀中,我使用
Socket socket = _tcpClient.Client;
byte[] buffer = new byte[1000];
IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
EndPoint senderRemote = sender;
int length = socket.ReceiveFrom(buffer, ref senderRemote);
string replyString = Encoding.ASCII.GetString(buffer, 0, length);
return replyString;
一些開銷與緩衝區初始化,但它打敗離的NetworkStream一次讀取一個字節,並尋找終止字符或字符串。
TcpClient不能以更好的方式處理讀取數據,例如Socket的方式,這難道不奇怪嗎?