用VB创建自己的通信程序

用VB创建自己的通信程序,第1张

Winsock控件建立在TCP、UDP的协议基础上,以完成计算机网络间的通信。下面将详细的介绍具体的程序创建过程,以便使大家更好的理解程序的源代码。

服务器端程序的运行过程是:

(1)服务器端要设置好侦听端口即LocalPort属性,作为侦听端口的值必须是一个整数(一定要是其它TCP/IP应用程序没有用过的值,并且不能与系统缺省端口冲突)。

(2)用Listen方法进入侦听状态,等待客户机的连接请求。

(3)当客户机发出连接请求时,使服务器产生一个ConnectionRequest事件,且该事件得到一个参数equestID。

(4)服务器程序用Accept方法接受客户机requestID请求。这样,服务器程序便可以用SendData方法来发送数据了。但是,Accept方法必须用上一个步得到的requestID作为其参数。

(5)当服务器程序接收到数据时,便会产生一个DataArrial事件,参数BytesTotal包含接收到的数据字节数。在该事件中,可以用GetData方法接收数据。

(6)如果接收到Close事件,则用Close方法关闭TCP/IP连接。

客户机的程序的运行过程是:

(1)在客户程序中设置Remmotehost属性,以便指定运行服务器程序的主机名,该字符串可以在服务器“ 控制面板 网络 标识 计算机”中查到。

(2)设置RemotePort属性,以便指定服务器程序的侦听端口(其设置方法与服务器端类似)。

(3)使用Connect方法,向服务器提出连接请求。

(4)当服务器程序接受到客户机程序的请求后,客户机程序产生Connect事件,就可以用SendData方法发送数据了。

(5)当客户机程序接收到数据时,便会产生DataArrival事件,参数BytesTotal包含接收到的数据字节数。类似的在该事件中也可以用GetData方法接收数据。

(6)如果客户机程序接收到Close,则用Close方法关闭连接。

使用说明:

本程序实现了两台计算机之间的自由通信。先将编译好的程序分别放入两台已联网的计算机的 开始 启动 中,这样每次启动时,程序将会自动运行,程序启动时将以最小化的形式出现在任务栏中,当用户使用时可以通过点击任务栏上的该程序图标来激活该程序,一方将程序激活后,在“请输入所要连接的主机名:“右侧的我框中输入需要连接的计算机名,并敲“连接”键便可连接成功。此时在“接收窗口:”下的我框中将会出现“连接成功”的提示。然后就可以在“发送窗口:”下的我框中输入要说的话了,输入完毕后敲“发送”键后便可使另一方收到你的话了,如果另一方的程序尚未正常化,那么另一方程序将发出提示音并使任务栏中程序的图标闪烁,直到另一方将程序激活为正常化并与你对话为止。如果暂时停止对话可以点击该程序的极小化按钮将程序最小化,一旦需要再次通话可直接激活该程序发送过去,如果另一方的程序尚未正常化,那么程序仍将发出提示音并使开使栏中程序的小图标闪烁,直到另一方将程序正常化并与你对话为止。所以,无论什么时候想与对方通话只要对方开了机便可以实现。当需要断开连接时请按“关闭”键,该程序能自动发送结束消息,使对方能够知道你已断开连接,以结束程序运行。

LZ:你机器具有2个COM口,可以实施串口通信.

ASCII字符收发:

Option Explicit

Dim strInput As String

Private Sub Command1_Click()

Dim strSend As String

strSend = "1"

MSComm1.Output = strSend

End Sub

Private Sub Form_Load()

MSComm1.CommPort = 1 '一个设置为1,另一个设置为2

MSComm1.Settings = "9600,n,8,1"

MSComm1.InputMode = comInputModeText

MSComm1.RThreshold = 1

MSComm1.PortOpen = True

End Sub

Private Sub MSComm1_OnComm()

Select Case MSComm1.CommEvent

Case comEvReceive

MSComm1.InputLen = 0

strInput = strInput &MSComm1.Input

Text1 = strInput

End Select

End Sub

2进制接收:

Option Explicit

Dim strInput As String

Private Sub Command1_Click()

Dim binSend(0) As Byte

binSend = &H1

MSComm1.Output = binSend

End Sub

Private Sub Form_Load()

MSComm1.CommPort = 1

MSComm1.Settings = "9600,n,8,1"

MSComm1.InputMode = comInputModeBinary '2进制接收

MSComm1.RThreshold = 1

MSComm1.PortOpen = True

End Sub

Private Sub MSComm1_OnComm()

Dim binRec() As Byte

Dim i As Integer

Select Case MSComm1.CommEvent

Case comEvReceive

MSComm1.InputLen = 0

binRec = MSComm1.Input

For i = 0 To UBound(binRec)

strInput = strInput &Right("0" &Hex(binRec(i)), 2)

Next

Text = strInput

End Select

End Sub

我也写过聊天程序,一般来说也就是使用winsock控件来通讯,我认真想过,但也没有想到特别方便的方法。我的做法是这样的:所有用户都有一个sc(0)在监听某个端口,比如1234。每次需要发送数据到其它计算机的时候,就load

sc(newindex),用这个新load出来的winsock来发送到那个用户的1234端口。为了可以及时回收,用一个集合来记录sc()中哪个下标正在使用,以决定在load的时候newindex的数字。当数据发送完毕,就unload

sc(finishindex),并从集合中把下标退出来。实际上在局域网发送文本消息几乎不需要多长时间,所以就算你在狂发信息,(我试过监视sc的数目)一般来说就是一个sc(0)在监听(当然这个是一直不会关的),一个sc(1)在发送,已经极少碰到load一个sc(2)的情况了。使用该方法的确能有效的保证在多用户聊天的情况下保证发送和接受都正确。

至于显示消息则很简单了。在接收方sc(0)的收到消息事件中将信息提取出来放到某个textbox即可,而发送方则可以在消息发送完毕的事件中将信息放到textbox中。

如果你看得不是很明白,我可以贴出我的部分代码,或者给你作进一步讲解。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8147820.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-13
下一篇 2023-04-13

发表评论

登录后才能评论

评论列表(0条)

保存