| | | | | | | [文章信息] | | | 作者: | 阿虎 | | 时间: | 2003-12-29 | | 出处: | 天极开发者网络 | | 责任编辑: | 方舟 | |
| [文章导读] | | | 本文的主要内容就来介绍在Visual Basic .Net实现基于TCP协议网络数据传送的一种简单的方法 | |
| |
|
| | | |
|
|
|
|
|
二.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:【服务器端程序】项目中组件设定数值表
并按照图01中各组件的位置和排列顺序来调整设计窗体中的组件:
 图01:【服务器端程序】项目的设计界面
9. 把Visual Studio .Net的当前窗口切换到Form1.vb的代码编辑窗口,并在Form1.vb文件的最前面添加下列代码,下列代码在Form1.vb中导入程序中要使用的类所在的命名空间:
Imports System.Net.Sockets '使用到TcpListen类 Imports System.Threading '使用到线程 Imports System.IO '使用到StreamReader类 | 10. 在Form1.vb中创建各种可视组件的代码中添加下列代码,下列代码的作用是创建全局使用的实例和变量:
Private iPort As Integer = 8000 '定义侦听端口号 Private thThreadRead As Thread '创建线程,用以侦听端口号,接收信息 Private tlTcpListen As TcpListener '侦听端口号 Private blistener As Boolean = True '设定标示位,判断侦听状态 Private nsStream As NetworkStream '创建接收的基本数据流 Private srRead As StreamReader '从网络基础数据流中读取数据 Private tcClient As TcpClient | 11. 在Form1.vb中的InitializeComponent过程之后添加下列代码,下列代码的作用是定义Listen过程,此过程的作用是侦听本地机的8000端口号,接受网络主机的TCP连接申请,并接收从建立申请的远程主机发送来的文本数据:
Private Sub Listen ( ) Try tlTcpListen = New TcpListener ( iPort ) '以8000端口号来初始化TcpListener实例 tlTcpListen.Start ( ) '开始监听 StatusBar1.Text = "正在监听..." tcClient = tlTcpListen.AcceptTcpClient ( ) '通过TCP连接请求 nsStream = tcClient.GetStream ( ) '获取用以发送、接收数据的网络基础数据流 srRead = New StreamReader ( nsStream ) '以得到的网络基础数据流来初始化StreamReader实例 StatusBar1.Text = "已经建立TCP连接!" '循环侦听 While blistener Dim sMessage As String = srRead.ReadLine ( ) '从网络基础数据流中读取一行数据 If ( sMessage = "STOP" ) Then tlTcpListen.Stop ( ) '关闭侦听 nsStream.Close ( ) srRead.Close ( ) '释放资源 StatusBar1.Text = "无连接!" thThreadRead.Abort ( ) '中止线程 Return Else '判断是否为断开TCP连接控制码 Dim sTime As String = DateTime.Now.ToShortTimeString ( ) '获取接收数据时的时间 ListBox1.Items.Add ( sTime + " " + sMessage ) End If End While Catch ex As System.Security.SecurityException MessageBox.Show ( "侦听失败!" , "错误" ) End Try End Sub |
|
|
|
|
|
|
|
|