情况是这样的:程序用于控制前端的设备,网络为2M跨网段以太网。程序通过WinSock控件实现通讯,协议为Tcp/IP。前端使用的是其它厂家的以太网转换设备,该厂家提供可通过WinSock控件通讯的接口,设为Server端,程序为Client端,以下是抽取出的部分程序代码。
Private Sub Form_Load()
Dim i as Integer
For i=0 to 31
TmrControlSta(i).Enabeld=True
Next i
End SubPrivate Sub TmrControlSta_Timer(Index As Integer)
'开始与前端的网络通讯,向前端发在线命令,同时测试在线状态。
On Error GoTo Tmrexit
If Me.WskClient(Index).State = sckConnected Then
WskClient(Index).SendData DoorStaRequest '向各前端发送在线检测
Else
If WskClient(Index).State <> sckConnected And _
WskClientIndex).State<>sckConnecting _
And WskClient(Index).State <> sckClosing And _
WskClient(Index).State <> sckOpen Then WskClient(Index).Connect
End If
Exit sub
Tmrexit:
End SubPrivate Sub TmrNetSta_Timer(Index As Integer)
Dim i As Integer '如果大于11S还没有前端状态信息返回则
If timeGetTime - TmLastGetTime(Index) > 11000 Then
Connected=False
WskClient(Index).Close
End If
End SubPrivate Sub WskClient_Connect(Index As Integer)
……
Connected=true
WskClient(Index).SendData DoorStaRequest '发送获取门状态信息协议
……
End SubPrivate Sub WskClient_DataArrival(Index As Integer, ByVal bytesTotal As Long)
……
TmLastGetTime(Index) = timeGetTime
'开始检测是否超过11S还未有前端状态信息送回
If TmrNetSta(Index).Enabled = False Then TmrNetSta(Index).Enabled = True
……
End SubPrivate Sub WskClient_Close(Index As Integer)
……
Connected=False
……
End SubPrivate Sub WskClient_Error(Index As Integer, ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)
……
If Number <> sckSuccess Then
Connected=False
WskClien(Index).Close
End If
……
End Sub
Private Sub Form_Load()
Dim i as Integer
For i=0 to 31
TmrControlSta(i).Enabeld=True
Next i
End SubPrivate Sub TmrControlSta_Timer(Index As Integer)
'开始与前端的网络通讯,向前端发在线命令,同时测试在线状态。
On Error GoTo Tmrexit
If Me.WskClient(Index).State = sckConnected Then
WskClient(Index).SendData DoorStaRequest '向各前端发送在线检测
Else
If WskClient(Index).State <> sckConnected And _
WskClientIndex).State<>sckConnecting _
And WskClient(Index).State <> sckClosing And _
WskClient(Index).State <> sckOpen Then WskClient(Index).Connect
End If
Exit sub
Tmrexit:
End SubPrivate Sub TmrNetSta_Timer(Index As Integer)
Dim i As Integer '如果大于11S还没有前端状态信息返回则
If timeGetTime - TmLastGetTime(Index) > 11000 Then
Connected=False
WskClient(Index).Close
End If
End SubPrivate Sub WskClient_Connect(Index As Integer)
……
Connected=true
WskClient(Index).SendData DoorStaRequest '发送获取门状态信息协议
……
End SubPrivate Sub WskClient_DataArrival(Index As Integer, ByVal bytesTotal As Long)
……
TmLastGetTime(Index) = timeGetTime
'开始检测是否超过11S还未有前端状态信息送回
If TmrNetSta(Index).Enabled = False Then TmrNetSta(Index).Enabled = True
……
End SubPrivate Sub WskClient_Close(Index As Integer)
……
Connected=False
……
End SubPrivate Sub WskClient_Error(Index As Integer, ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)
……
If Number <> sckSuccess Then
Connected=False
WskClien(Index).Close
End If
……
End Sub
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货