TcpClient.GetStream().Read() 和 TcpClient.Client.Receive() 的区别

6

.NET提供了两种非常相似的方式从网络中“读取”(假设是TCP连接):

1. TcpClient.GetStream().Read() 
2. TcpClient.Client.Receive()

通过查看NetworkStream源代码,它似乎是对底层套接字的额外包装器,最终调用Socket方法。

问题:使用“间接”的NetworkStream变体(#1),而不是使用Socket实现提供的直接包装器,有什么好处?

谢谢, 鲍里斯。

3个回答

13
事实上,使用第一种选项(TcpStream而不是Socket)有一个相当明显的好处。该好处在于,当需要在同一程序中使用不同的底层实现时,流API更加灵活。
例如,有些情况下代码可能会使用SSL,而其他情况则不使用它,可以在不更改调用代码的情况下在SslStream和TcpStream之间进行切换。这是仅使用普通Socket API难以实现的事情。

1

其实没什么,有时使用流更方便。


-1
在我看来,一个成功的Socket.Receive操作并且接收到零字节,说明连接已关闭。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接