TcpClient.GetStream()。Read()vs. TcpClient.Client.Receive()

时间:2009-11-16 18:47:23

标签: c# .net sockets

.NET允许两种非常类似的方式从网络“读取”(假设TCP连接):

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

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

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

谢谢你,   鲍里斯。

3 个答案:

答案 0 :(得分:11)

事实上,使用第一个选项(TcpStream而不是Socket)有一个非常明显的好处。这样做的好处是,当同一程序需要不同的底层实现时,流API更灵活。

例如,有时可能使用SSL并且有时可能不使用SSL的代码可以在SslStream和TcpStream之间切换而不更改调用代码。只使用普通的Socket API,这是很难实现的。

答案 1 :(得分:1)

没什么,真的。只是有时使用Stream更方便。

答案 2 :(得分:-1)

对我来说,收到零字节的成功Socket.Receive操作会告诉您连接已关闭。