赵晓凤
(苏州工业园区工业技术学校,江苏 苏州215123)
在局域网中发布信息可以不依赖基于因特网开发的信息发布交流工具,这种方式很好地解决了因外网不稳定而造成信息中断的问题,而且有很强的保密性,适合企事业单位使用。本文就如何设计开发局域网信息发布系统进行了有效的尝试。
局域网信息发布系统开发流程如图1所示。
图1 局域网信息发布系统开发流程
传输协议有很多种,本文开发局域网信息发布系统主要应用TCP协议,通过TCP协议把本地计算机和远程计算机进行连接。TCP协议要求必须先建立连接,然后才被允许数据传输。能被利用开发局域网信息发布系统的协议还有UDP协议。UDP协议的特点是在传输数据前,不进行连接请求而直接发送,在传输信息上来看这样做很不可靠。
要实现局域网通信,VB中提供了一种方便易行的方法,那就是Winsock控件。这样设计者就可以不必了解数据传输细节,非常容易地进行程序设计。
VB中Winsock控件能使用两种协议:TCP协议及UDP协议。TCP协议能保证传输数据安全到达目的地,而UDP协议只是将数据传送到网络上,不检查数据是否到达目的地,因此要进行安全通信控制和实时会话最好采用TCP协议。
Winsock控件有很多的属性、方法及事件,以下是设计时可能会常使用的几种属性、方法和事件。
(1)属性
Index:控件索引值
LocalHostName:本机名
LocalIP:本机IP
LocalPort:通信端口
Name:实例名
Protocol:所用协议,主要指TCP和UDP
RemoteHost:服务器名
RemoteHostIP:服务器ip
RemotePort:服务器侦听端口
State:控件连接状态,即连接与未连接
(2)方法
Accept():接受连接请求
Close():关闭该连接
Connect():请求与远程计算机连接
GetData():从接收缓冲区读取数据
Listen():侦听连接请求
SendData():发送数据
(3)事件
Close():关闭连接时发生
Connect():建立连接时发生
ConnectionRequest():客户端请求与服务器程序连接时发生
DataArrival():数据到达时发生Error():发生错误时发生
远程计算机的连接原理:TCP协议要求必须使用服务器才能建立连接、通信,加上需要分别开发客户端程序和服务器端程序。
2.3.1 设计客户端程序需要明确项
(1)服务器计算机的名称以及Ip地址,利用RemoteHost属性调用。
(2)服务器计算机的通信端口,利用RemotePort属性调用。
(4)服务器建立连接后,进行数据的传送和捕捉,利用事件DataArrival和方法SendData与GetData。
2.3.2 服务器端程序的主体
(1)设置服务器的通信端口。
(2)调用侦听,捕捉客户机的请求,利用Listen方法。
(3)接到连接请求后,建立连接,利用Accept方法。
(4)服务器建立连接后,进行数据的捕捉和传送,利用事件DataArrival和方法SendData与GetData。
首先设置其IP地址为:10.72.83.1,在防火墙-设置本地端口localPort设为1200(使用不常用的端口,否则会发生冲突),在服务器端程序加入一个winsock控件,名称为changgongserver(0),这样就可以在运行时动态地增减控件,便于与多个计算机进行对话。在主窗体Load事件中的代码如下。
changgongserver(0).bind
changgongserver(0).LocalPort
阿什哈达摩崖石刻始刊于清德宗光绪十七年(1891)吉林将军长顺监修的《吉林通志·金石志》卷120,但文字著录错误较多,不足为研究的依据。其后陆续有人亲赴现地进行调查和墨拓,他们所著录的文字,虽然基本已趋于一致,但个别地方仍略有不同。因此,1957年5月,吉林省博物馆派人实地调查,并作了记录、照相和墨拓。1972年,吉林省博物馆又做了一次调查核对。
‘用于绑定端口号或者在Winsock
控件属性中设置也可以
‘侦听客户机的请求
changgongserver(0).listern
3.2.1 建立连接
在客户端程序中,添加 Winsock控件,方法是在工具栏中右击部件,查找到对应部件选中确认即可。在Winsock控件的属性窗口中RemoteHostIP(即服务器IP)为”10.72.83.1”,RemotePort(即服务器侦听客户机请求的端口)=1200。
为了传输信息,必须建立通信连接,客户端必须要发出请求,实现代码为:changgongconnect.connect changgongconnect.RemoteHost,changgongconnect.RemotePort,服务器接收到请求后,通过 ConnectRequest事件调用连接,具体代码实现如下:
Private sub changgongserver_connectrequest(Index as Integer,Byval requestid as long)
dim simple as string//用于存储客户端IP
dim I as integer//
On Error GoTo ErrHandle
simple=changgongserver(0).RemoteHostIP//获得登录者地址信息
X=1
Do while X<=changgongserver.ubound//检查该地址是否已存在
If changgongserver(X).RemoteHostIP=simple then//如果存在的话就不必加载新的控件
Changgongserver(X).Accept requested
Exit sub
End If
X=X+l
loop
load changgongserver(X)//加载新的控件
changgongserver(X).accept requested
End sub
3.2.2 客户端传送实现
首先设置在客户端窗体程序中加入主体控件,主要有两个:commond控件“send”和文本框控件。文本框控件的name属性设为txt_info,即为需要传送的信息或数据。
在 “send”控件代码窗口中加入如下代码:
dim userinfo as string
userinfo=txt_info.text
sckconnect.SendData userinfo
3.2.3 服务器端数据的接收
连接建立后,服务器端捕获到客户端发出的信息后,通过DataArrival事件调用GetData方法完成数据的接收工作,服务器端DataArrival事件代码窗口中加入以下代码:
Private sub changgongserver_DataArrival(Index as integer,Byval BytesTotal as long)
dim clientdata as string
‘定义字符串变量,用于接收数据
changgongserver(1).GetData clientdata,vbstring
‘服务器捕获客户端发出的信息,并‘把信息存入到clientdata变量中
end sub
为了让每个用户都可以收到,还要在服务端WINsock控件中的DataArrival事件中加入数据的转发语句,传送给已经与主机建立连接的所有客户端,实现代码如下:
For info=l to changgongserver.Count Step 1
if changgongserver(X).state=changgongClosed then‘检测连接状态
Else
Changgongserver(X).SendData client data ‘转发数据
End If
next info
3.2.4 客户端程序接收数据
在数据到达客户端后,同时触发客户端的Data-Arrival事件,在该事件中仍然调用GetData方法对数据进行接收工作:
Private sub changgongserver_DataArrival(Index as integer,Byval BytesTotal as long)
dim serverdata as string定义变量,用于接收
changgongserver(1).GetData serverdata,vbstring‘存在变量中
end sub
3.2.5 程序的关闭
在关闭应用程序前,先要关闭连接,在窗体unload事件中加入如下代码:
Private sub myform_unload(cancel as integer)
if changgongconnect.state<>0then
changgongconnect.Close()
end if
end sub
本程序仅仅利用了vb语言中Winsock控件的强大功能中的一部分,即调用TCP协议实现局域网的相互通信。要实现功能更强、更完备的通信系统,获得良好的兼容性与容错性,还需要深入地研究。