TcpClient类用于在同步阻止模式下通过网络来连接、发送和接收流数据。为使TcpClient连接并交换数据,使用TcpProtocolType类创建的TcpListener实例或Socket实例必须侦听是否有传入的连接请求。可以使用下面两种方法之一连接到该侦听器。
☆ 创建一个TcpClient,并调用3个可用的Connect方法之一。
☆ 使用远程主机的主机名和端口号创建TcpClient,该构造函数将自动尝试一个连接。
TcpListener类用于在阻止同步模式下侦听和接受传入的连接请求。可使用TcpClient类或Socket类来连接TcpListener,并且可以使用IPEndPoint、本地IP地址及端口号或者仅使用端口号来创建TcpListener实例对象。
注意
如果要在同步阻止模式下发送无连接数据报,请使用UdpClient类。
TcpClient类的常用属性、方法及说明如表1所示。
表1 TcpClient类的常用属性、方法及说明
属性及方法 | 说明 |
Available属性 | 获取已经从网络接收且可供读取的数据量 |
Client属性 | 获取或设置基础Socket |
Connected属性 | 获取一个值,该值指示TcpClient的基础Socket是否已连接到远程主机 |
ReceiveBufferSize属性 | 获取或设置接收缓冲区的大小 |
ReceiveTimeout属性 | 获取或设置在初始化一个读取操作以后TcpClient等待接收数据的时间量 |
SendBufferSize属性 | 获取或设置发送缓冲区的大小 |
SendTimeout属性 | 获取或设置TcpClient等待发送操作成功完成的时间量 |
BeginConnect方法 | 开始一个对远程主机连接的异步请求 |
Close方法 | 释放此TcpClient实例,而不关闭基础连接 |
Connect方法 | 使用指定的主机名和端口号将客户端连接到TCP主机 |
EndConnect方法 | 异步接收传入的连接尝试 |
GetStream方法 | 返回用于发送和接收数据的NetworkStream |
TcpListener类的常用属性、方法及说明如表2所示。
表2 TcpListener类的常用属性、方法及说明
属性及方法 | 说明 |
LocalEndPoint属性 | 获取当前TcpListener的基础EndPoint |
Server属性 | 获取基础网络Socket |
AcceptSocket/AcceptTcpClient方法 | 接受挂起的连接请求 |
BeginAcceptSocket/BeginAcceptTcpClient方法 | 开始一个异步操作来接收一个传入的连接尝试 |
EndAcceptSocket方法 | 异步接收传入的连接尝试,并创建新的Socket来处理远程主机通信 |
EndAcceptTcpClient方法 | 异步接收传入的连接尝试,并创建新的TcpClient来处理远程主机通信 |
Start方法 | 开始侦听传入的连接请求 |
Stop方法 | 关闭侦听器 |
注意
Stop方法用来关闭TcpListenerStop(侦听),但不会关闭任何已接受的连接。
下面演示TcpClient类和TcpListener类的使用方法。
【例】新建一个Windows应用程序,在窗体中添加两个TextBox控件、一个Button控件和一个RichTextBox控件。其中,两个TextBox控件分别用来输入要连接的主机及端口号,Button控件用来执行连接远程主机操作,RichTextBox控件用来显示远程主机的连接状态。
代码如下:
private void button1_Click(object sender, EventArgs e)
{
//实例化一个TcpListener对象,并初始化为空
TcpListener tcplistener = null;
//实例化一个IPAddress对象,用来表示网络IP地址
IPAddress ipaddress = IPAddress.Parse(textBox1.Text);
//定义一个int类型变量,用来存储端口号
int port = Convert.ToInt32(textBox2.Text);
tcplistener = new TcpListener(ipaddress, port); //初始化TcpListener对象
tcplistener.Start(); //开始TcpListener侦听
richTextBox1.Text = "等待连接...\n";
TcpClient tcpclient = null; //实例化一个TcpClient对象,并赋值为空
if (tcplistener.Pending()) //判断是否有挂起的连接请求
tcpclient = tcplistener.AcceptTcpClient(); //使用AcceptTcpClient初始化TcpClient对象
else
tcpclient = new TcpClient(textBox1.Text, port); //使用TcpClient的构造函数初始化TcpClient对象
richTextBox1.Text += "连接成功!\n";
tcpclient.Close(); //关闭TcpClient连接
tcplistener.Stop(); //停止TcpListener侦听
}
程序的运行结果如下图所示。
图2 TcpClient类和TcpListener类的使用
http://www.longziyong.cn/post/csharp/2015/06/414.html