扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
| Dim tcpClient As TcpClient Dim nsStream As NetworkStream tcpClient = New TcpClient( "www.microsoft.com" , 8000) '对远程主机的8000端口提出TCP连接申请 nsStream = tcpClient.GetStream ( ) 'TCP连接建立后,获得网络数据传输的基础数据流 |
| 方法 | 说明 |
| BeginRead | 开始异步读者基础数据流。 |
| BeginWrite | 开始异步写入基础数据流。 |
| Close | 关闭流并可选择关闭基础套接字。 |
| EndRead | 结束异步读取。 |
| EndWrite | 结束异步写入。 |
| Flush | 刷新流中的数据。 |
| Read | 从流中读取数据。 |
| Seek | 将流的当前位置设置为给定值。 |
| SetLength | 设置流的长度。 |
| Write | 将数据写入流。 |
| 属性 | 说明 |
| CanRead | 获取当前流是否支持读取。 |
| CanSeek | 获取流是否支持查找。该属性总是返回 false。 |
| CanWrite | 获取当前流是否支持写入。 |
| DataAvailable | 获取是否可以在流上读取数据。 |
| Length | 流上可用数据的长度。 |
| Position | 获取或设置流中的当前位置。 |
表02:NetworkStream类中属性及其说明
2. StreamReader类:
StreamReader类能够实现对基础数据流的读操作,从而实现对经过基础数据流传送来的数据。表03是StreamReader类的常用的方法及其说明:
| 方法 | 说明 |
| Close | 关闭StreamReader并释放与阅读器关联的所有系统资源。 |
| DiscardBufferedData | 允许StreamReader丢弃其当前数据。 |
| Peek | 返回下一个可用的字符,但不使用它。 |
| Read | 读取输入流中的下一个字符或下一组字符。 |
| ReadBlock | 从当前流中读取最大数量的字符并从索引开始将该数据写入缓冲区。 |
| ReadLine | 从当前流中读取一行字符并将数据作为字符串返回。 |
| ReadToEnd | 从流的当前位置到末尾读取流。 |
表03:NetworkStream类中常用的方法及其说明
3. StreamWriter类:
StreamWriter类能够实现对基础数据流的写操作,从而实现提供基础数据流来传送数据。表04是StreamWriter类的常用方法及其说明:
| 方法 | 说明 |
| Close | 关闭当前的StreamWriter和基础流。 |
| Flush | 清理当前编写器的所有缓冲区,并使所有缓冲数据写入基础流。 |
| Write | 写入基础数据流。 |
| WriteLine | 写入重载参数指定的某些数据,后跟行结束符。 |
表04:StreamWriter类的常用方法及其说明
4.TcpClient 类:
TcpClient 类主要为TCP网络服务提供客户端连接。TcpClient是类基于Socket类构建,
它以更高的抽象程度提供TCP服务。TcpClient 提供了通过网络连接、发送和接收数据的简单方法。表05和表06分别是TcpClient类常用方法、属性及其说明。
| 方法 | 说明 |
| Close | 关闭 TCP 连接 |
| Connect | 使用指定的主机名和端口号将客户端连接到 TCP主机 |
| GetStream | 返回用于发送和接收数据的流 |
表05:TcpClient类常用的方法
| 属性 | 描述 |
| LingerState | 有关套接字逗留时间的信息 |
| NoDelay | 一个值,该值在发送或接收缓冲区未满时启用延迟 |
| ReceiveBufferSize | 接收缓冲区的大小 |
| ReceiveTimeout | TcpClient在启动后为接收数据而等待的时间长度 |
| SendBufferSize | 发送缓冲区的大小 |
| SendTimeout | 在您启动发送操作后TcpClient将为接收确认而等待的时间长度 |
表06:TcpClient类常用的属性
5.TcpListener 类:
TcpListener类的主要作用是从TCP网络客户端侦听连接,TcpListener类基于Socket 类
提供更高理念级别的TCP服务。可以使用TcpListener从TCP客户端侦听连接。像 FTP 和 HTTP 这样的应用层协议是在 TcpListener 类的基础上建立的。表7和表8分别是TcpListener类常用方法、属性及其说明:
| 方法 | 说明 |
| AcceptSocket | 接受挂起的连接请求 |
| AcceptTcpClient | 接受挂起的连接请求 |
| Pending | 确定是否有挂起的连接请求 |
| Start | 开始侦听网络请求 |
| Stop | 关闭侦听器 |
表7:TcpListener 类常用的方法
| 属性 | 说明 |
| LocalEndpoint | 获取当前TcpListener的基础EndPoint |
| Active | 获取一个值,该值指示 TcpListener 是否正主动侦听客户端连接 |
| Server | 获取基础网络Socket |
表8:TcpListener 类常用的属性
二.Visual Basic .Net实现基于TCP协议数据传送程序的体系结构:
在下面介绍的用Visual Basic .Net实现基于TCP协议的数据传送程序是由二个子程序组成的。也可以看成是服务器端程序和客户端程序,其中:服务器端程序的功能是侦听端口号,接收远程主要的TCP连接申请,并接收远程主机传送来的文字数据。另外一个子程序,也就是所谓的客户端程序,主要实现向网络的远程主机提出TCP连接申请,并在连接申请通过后,向远程主机传送文字数据。下面来详细介绍Visual Basic .Net实现TCP协议网络数据传送的服务器端程序和客户端程序的具体步骤。
三.服务器端程序的具体实现步骤:
服务器端程序的实现关键在于侦听端口号,接收远程主机的TCP连接申请,获得网络数据传输的基础数据流,并通过基础数据流接收数据。接收数据使用的是StreamReader中ReadLine方法,由于ReadLine方法是一个阻塞式的方法,所以在下面具体的实现步骤中,是接收数据是在创建的线程中完成的,具体可参阅下面实现步骤中的第十一和十二步。以下是Visual Basic .Net实现TCP协议客户端程序实现的具体步骤:
1. 启动Visual Studio .Net。
2. 选择菜单【文件】|【新建】|【项目】后,弹出【新建项目】对话框。
3. 将【项目类型】设置为【Visual Basic项目】。
4. 将【模板】设置为【Windows应用程序】。
5. 在【名称】文本框中输入【服务器端程序】。
6. 在【位置】的文本框中输入【E:\VS.NET项目】,然后单击【确定】按钮,这样在"E:\VS.NET项目"目录中就产生了名称为"服务器端程序"的文件夹,并在里面创建了名称为"服务器端程序"的项目文件。
7. 把Visual Studio .Net的当前窗口切换到【Form1.vb(设计)】窗口,并从【工具箱】中的【Windows窗体组件】选项卡中往Form1窗体中拖入下列组件,并执行相应的操作:
一个Label组件。
一个StatusBar组件。
一个ListBox组件。
一个Button组件,并在这个Button组件拖入Form1的设计窗体后,双击它,则系统会在Form1.vb文件分别产生这个组件的Click事件对应的处理代码。
8. 按照表05所示调整窗体中各组件属性的数值:
| 组件类型 | 组件名称 | 属性 | 设置结果 |
| Form | Form1 | Text | 服务器端程序 |
| Form1 | MaximizeBox | False | |
| Form1 | FormBorderStyle | FixedSingle | |
| Button | Button1 | Text | 启动服务 |
| Button1 | FlatStyle | Flat | |
| Label | Label1 | Text | 服务尚未启动 |
| StatusBar | StatusBar1 | Text | 无连接! |
表05:【服务器端程序】项目中组件设定数值表