回用于发送和接收数据的基础网络流NetworkStream。GetStream 通过将基础 Socket 用作它的构造函数参数来创建 NetworkStream 类的实例。使用前你需要先创TcpClient对象实例并建立与远程主机的连接,示例如下:
TcpClient tcpClient = new TcpClient();//创建TcpClient对象实例
Try{
tcpClient.Connect("www.tuha.net",4088);//尝试与远程主机相连
}
catch(Exception e){
MessageBox.Show("连接错误:"+e.Message);
}
try{
NetworkStream stream=tcpClient.GetStream();//获取网络传输流
}
catch(Exception e)
{
MessageBox.Show("TcpClient错误:"+e.Message);
}
通过以上方法得到NetworkStream网络流之后,你就可以使用标准流读写方法Write和Read来发送和接受数据了。
以上是.Net下使用TcpClient类实现客户端编程的技术
资料,为了向客户端提供这些服务,我们还需要编制相应的服务端程序,前一篇《Visual C#.Net网络程序开发-Socket篇》上曾经提到, Socket作为其他网络协议的基础,既可以面向客户端开发,也可以面向服务端开发,在传输层面上使用较多,而在应用协议层面上,客户端我们采用构建于Socket类之上的TcpClient取代Socket;相应地,构建于Socket之上的TcpListener提供了更高理念级别的 TCP 服务,使得我们能更方便地编写服务端应用
程序。正是因为这样的原因,像FTP 和 HTTP 这样的应用层协议都是在 TcpListener 类的基础上建立的。
.Net中的TCPListener 用于监视TCP 端口上的传入请求,通过绑定本机IP地址和相应端口(这两者应与客户端的请求一致)创建TcpListener对象实例,并由Start方法启动侦听;当TcpListener侦听到用户端的连接后,视客户端的不同请求方式,通过AcceptTcpClient 方法接受传入的连接请求并创建 TcpClient 以处理请求,或者通过AcceptSocket 方法接受传入的连接请求并创建 Socket 以处理请求。最后,你需要使用 Stop 关闭用于侦听传入连接的 Socket,你必须也关闭从 AcceptSocket 或 AcceptTcpClient 返回的任何实例。这个过程详细解说如下:
首先,创建TcpListener对象实例,这通过TcpListener类的构造方法来实现:
public TcpListener(port);//指定本机端口
public TcpListener(IPEndPoint)//指定本机终结点
public TcpListener(IPAddress,port)//指定本机IP地址及端口
以上方法中的参数在前面多次提到,这里不再细述,唯一需要提醒的是,这些参数均针对服务端主机。下面的示例演示创建 TcpListener 类的实例:
IPHostEntry ipInfo=Dns.Resolve("127.0.0.1");//主机信息
IPAddressList ipList=ipInfo.IPAddressList;//IP数组
IPAddress ip=ipList[0];//IP
try{
TcpListener tcpListener = new TcpListener(ipAddress, 4088);//创建TcpListener对象实例以侦听用户端连接
}
catch ( Exception e){
MessageBox.Show("TcpListener错误:"+e.Message);
}
随后,你需要调用Start方法启动侦听:
public void Start();
其次,当侦听到有用户端连接时,需要接受挂起的连接请求,这通过调用以下两方法之一来完成连接:
public Socket AcceptSocket();
public TcpClient AcceptTcpClient();
前一个方法返回代表客户端的Socket对象,随后可以通过Socket 类的 Send 和 Receive 方法与远程计算机通讯;后一个方法返回代表客户端的TcpClient对象,随后使用上面介绍的 TcpClient.GetStream 方法获取 TcpClient 的基础网络流 NetworkStream,并使用流读写Read/Write方法与远程
计算机通讯。
最后,请记住关闭侦听器:public void Stop();
同时关闭其他连接实例:public void Close();
下面的示例完整体现了上面的过程:
bool done = false;
TcpListener listener = n