新型交互式射击游艺控制系统设计与实现
创建服务器应用程序时,就应相应设置一个侦听端口(LocalPort属性)并调用Listen方法。当客户机需要连接时(connect),就会发生ConnectionRequest事件。由于系统有多个客户端,因此要动态管理客户端的各个连接请求,参考如下程序设计:
Private sub sckserver_connectrequest(Index as Integer,Byval requestid as long)
dim sip as string
dim I as integer
sip=sckserver(0).RemoteHostIP '获得登录者的IP地址
I=1
Do while I<=sckserver.ubound '检查是否已经有该地址的记录
If sckserver(I).RemoteHostIP=sip then '如有,不必加载新的控件
Sckserver(I).Accept requestid
Exit sub
End if
I=I+1
Loop
Load sckserver(I) '否则,加载新的控件
Scksrver(I).accept requestID
End sub
为了完成连接,在ConnectionRequest事件中调用Accept方法。建立连接后,任何一方计算机都可以发送、接收对方数据。发送数据时,需调用SendData方法。当接收到数据时,会发生DataArrival事件,调用DataArrival事件中的GetData方法就可以获得对方传送的数据。
基于MSComm的串口通信程序设计
MSComm通信控件提供了一系列标准通信命令的接口,它允许建立串口连接,可以连接到其他通信设备、还可以发送命令、进行数据交换以及监视和响应在通信过程中可能发生的各种错误和事件,从而可以用它创建全双工的、事件驱动的、高效实用的通信程序。
在程序加载过程中,由于可能存在无线和CAN两种通信方式,所以在Form_Load事件中要进行初始化处理,参考以下程序:
‘CAN总线主控制器初始化程序
For i = 0 To Comm_Port_Num - 1
If CommSetups(i).commType = "CAN" Then
MSComm1.CommPort =CInt(Mid(Trim(CommSetups(i).commID), 4))
If MSComm1.PortOpen Then MSComm1.PortOpen = False
MSComm1.Settings = Trim(CommSetups(i).commSetting)
MSComm1.PortOpen = True '打开串行口
Text1.Text = "CAN通信端口初始化成功" & vbCrLf
Exit For
End If
Next i
‘nRF905射频主控制器初始化程序
For i = 0 To Comm_Port_Num - 1
If CommSetups(i).commType = "COM" Then
MSComm1.CommPort =CInt(Mid(Trim(CommSetups(i).commID), 4))
If MSComm1.PortOpen Then MSComm1.PortOpen = False
MSComm1.Settings = Trim(CommSetups(i).commSetting)
MSComm1.PortOpen = True '打开串行口
Text1.Text = "nRF905端口初始化成功" & vbCrLf
Exit For
End If
Next i
在数据接收过程中,MSComm提供了两种处理通信问题的方法,一是事件驱动方法,一是查询法。本系统采用事件驱动方法,当有新字符到达或端口状态改变,或发生错误时,MSComm控件将触发OnComm事件,而应用程序在捕获该事件后,通过检查MSComm控件的CommEvent属性可以获知所发生的事件或错误,从而采取相应的操作。
评论