我在VB中使用 WinSock 控件向别的机器发数据,用ICP/IP协议,在发送时经常会报错:“所需事物或请求的错误协议或连接状态”
Winsock1.SendData 时出错,但 Winsock1.Connect 没事,不知道为什么?
我在Form_Load时用Winsock1.Connect 建立联接 ,在Form_Unload 时Winsock1.Close另外,怎么检测串口有无设备?及设备是否可用?
Winsock1.SendData 时出错,但 Winsock1.Connect 没事,不知道为什么?
我在Form_Load时用Winsock1.Connect 建立联接 ,在Form_Unload 时Winsock1.Close另外,怎么检测串口有无设备?及设备是否可用?
Private Sub Form_Load()
tcpClient.RemotePort = 1001
tcpClient.RemoteHost = "192.168.168.100"
IF tcpClient.state=0 then
tcpClient.Connect
end if
End SubPrivate Sub Command1_Click()
If tcpServer.State = 7 Then
tcpServer.SetData strData
End If
end sub
http://www.ahetc.gov.cn/cit/200011/08.doc 这个文章说的很详细!
我原来在服务器端的WinSock 没有写Close事件,
Private Sub sckServer_Close()
sckServer.Close '释放接连
End Sub客户端的WinSock执行Winsock1.Close 时会触发服务器端的sckServer_Close 事件,需要把联
接关掉!多谢 online(龙卷风V2.0--再战江湖) !
那我接着问第二个问题:怎么检测串口有无设备?及设备是否可用?
转载Private Sub FillPorts()
On Error GoTo staErr
Dim i As Long, fInvalid As Boolean
For i = 1 To 256
DoEvents
With MSComm1(0)
.CommPort = i
Me.Caption = APP_NAME + "---正在搜索可用串口...已完成" + CStr(Int(i / 256 * 100)) + "%"
If Not .PortOpen = True Then .PortOpen = True
If Not fInvalid Then
Combo1.AddItem "COM" + Trim(CStr(i))
Combo1.ItemData(i) = 1
Load MSComm1(MSComm1.Count)
MSComm1(MSComm1.Count + 1).CommPort = i
End If
.PortOpen = False
End With
Next
With Combo1
If .ListCount > 0 Then .Text = .List(0)
glCurrentPort = 1
Me.Caption = APP_NAME + "---共找到" + CStr(.ListCount) + "个" + "可用串口"
End With
Exit Sub
staErr:
If Err.Number = comPortInvalid Then
fInvalid = True
Else
fInvalid = False
End If
Resume Next
End SubPrivate Sub Command1_Click()
FillPorts
End Sub
With MSComm1
'使用 COM2。
.CommPort = 2
If .PortOpen Then
.PortOpen = False
End If
If .PortOpen = False Then
'9600 波特,无奇偶校验,8 位数据,一个停止位。
.Settings = "9600,N,8,1"
'打开端口。
.PortOpen = True
'
If err Then '错误处理
MsgBox "串口通信无效"
Exit Function
End If End If
.InputMode = comInputModeBinary
'当输入占用时,
'告诉控件读入整个缓冲区。
.InputLen = 0 '清空发送缓冲区
.OutBufferCount = 0 '清空接收缓冲区
.InBufferCount = 0
'
.RThreshold = 1
.SThreshold = 1
'清空
BufferTemp = .Input
BufferTemp = ""
End With然后用 MSComm1.Output = strPutData 向串口发数据,即便串口没有设备程序也返回错误!
strPutData 在之前已经赋过值!
dim mIntCount As IntegerPrivate Sub Timer1_Timer()
If mIntCount > 5 Then
Timer1.Interval = 0 LblTitle = LblTitle & vbCrLf & "未接收到串口数据,请重试!"
Exit Sub
End If
'
mIntCount = mIntCount + 1
End Sub
Private Sub MSComm1_OnComm()
With MSComm1
Select Case .CommEvent
Case comEvReceive
mIntCount = 0 ............ Case Else
End Select
End With
End Sub
如果接收到数据就 mIntCount = 0,
如果 Timer1_Timer 发现 mIntCount 已经大于5,即10秒钟(或更短时间)没有接收到数据,就提示!
Buffer 在之前已经赋过值!
我想在使用串口通讯前就能判断串口是否有可用设备,如果没有,就不进入发数据的模块,不想等发数据后再判断串口!