【发布时间】:2012-03-22 02:44:39
【问题描述】:
我知道 TcpClient 是套接字类的包装器,如果使用 TcpClient,我可以访问底层套接字,但包装器到底是做什么的?
当使用 TCPClient 时,我是否需要像使用套接字一样继续调用 Receive(),或者包装器是否确保我的所有数据都出现?
最后,我可以在服务器和客户端都使用TcpClient来包装socket吗(在使用TcpListener接受服务器上的原始连接之后)
【问题讨论】:
我知道 TcpClient 是套接字类的包装器,如果使用 TcpClient,我可以访问底层套接字,但包装器到底是做什么的?
当使用 TCPClient 时,我是否需要像使用套接字一样继续调用 Receive(),或者包装器是否确保我的所有数据都出现?
最后,我可以在服务器和客户端都使用TcpClient来包装socket吗(在使用TcpListener接受服务器上的原始连接之后)
【问题讨论】:
包装器究竟做了什么?
让我用一个例子来解释一下。您在 C#File.ReadAllLines 中有一个方法。它会为您读取文件中的所有行。现在,您还可以通过FileStream 类或任何其他读取文件的类 .. BUT.. 包装器(即File.ReadAllLines)实现相同的结果,允许您用更少的代码行来实现相同的结果。包装器总是通过抽象出低级细节来提高生产力
使用 TCPClient 时,我是否需要像我一样继续调用 Receive() 使用套接字还是包装器确保我的所有数据都出现?
TCPClient 没有像Socket 这样的Receive 方法,但想法是一样的。您将不得不使用GetStream 之类的方法来读取它不会自动为您显示的数据
我可以在服务器和客户端上都使用 TcpClient 来包装 插座
是的,您可以在客户端和服务器端安全地使用它
【讨论】:
NetworkStream 类的 Read 和 Write 方法,而不是 BeginRead 和 EndRead,因为您不必显式调用 BeginRead 和 @987654335 @包装器会为你做。在互联网上查看一些示例,例如 msdn.microsoft.com/en-us/library/…