我知道TcpClient是socket类的包装器,用TcpClient可以访问底层的socket,但这个包装器具体有什么作用呢?
在使用TCPClient时,我是否需要像使用socket一样不断调用Receive()方法,或者说这个包装器会确保所有数据都被接收到了?
最后,我能否在服务器和客户端上同时使用TcpClient来包装socket(在服务器上使用TcpListener接受原始连接后)?
包装器(wrapper)实际上是做什么的?
我举个例子来解释一下。在C#中有一个方法叫File.ReadAllLines
,它可以帮你读取文件中的所有行。当然你也可以通过FileStream
类或者其他读取文件的类来实现同样的效果……但是,使用包装器即File.ReadAllLines
,可以让你用更少的代码实现同样的效果。包装器总是通过抽象出低层细节来提高生产率。
使用TCPClient时,我需要像使用Socket那样不断调用Receive()方法吗?还是包装器会确保我的所有数据都出现了?
TCPClient
没有像Socket
那样的Receive
方法,但是想法是相同的。您需要使用GetStream
等方法来读取数据,它不会自动出现在您面前。
我可以在服务器和客户端上都使用TcpClient来包装套接字吗?
是的,你可以放心地在客户端和服务器端都使用它。
NetworkStream
类的Read
和Write
方法,而不是BeginRead
和EndRead
,因为您不必显式地调用BeginRead
和EndRead
,封装程序会自动处理。在互联网上查看一些示例,例如http://msdn.microsoft.com/en-us/library/system.net.sockets.tcpclient.getstream.aspx。 - Haris Hasan