vb6.0 winsock 控件数组发送数据只有最后一个能发出去
服务器采用一个WinsockHost做Listen收到请求后Load一个WinsockList(n)来Accept请求建立连接之后都使用这个控件数组通讯。问题来了,客户端...
服务器采用一个WinsockHost做Listen
收到请求后Load一个WinsockList(n)来Accept请求
建立连接之后都使用这个控件数组通讯。
问题来了,客户端多开后只有最后登录的一个客户端能收到服务端发出的信息,为了实验方便我采用的Timer空间做时钟信号。枚举控件数组的所有元素,当状态为7的时候发送心跳包。
这是服务器的时钟信号部分的代码
Dim j As Long
j = 1
Do While j < WinsockList.Count
LogAdd j & "号机状态为" & WinsockList(j).State
If WinsockList(j).State = 7 Then
WinsockList(j).SendData "msg你是" & j & "号机 这是生命探测系统" & Time & "发出"
LogAdd "时钟信号" & Time & "给" & j & "号机"
Else
LogAdd j & "号机断开"
End If
j = j + 1
Loop
确定每一个状态为7的链接都执行了循环的,但是出最后登录的一个客户端以外,其他都没反应。注意是没反应而不是连接断开。
下边是客户端的部分代码
Private Sub Winsock_DataArrival(ByVal bytesTotal As Long)
Dim str As String
Winsock.GetData str '获取数据
LogAdd "接到数据"
Select Case Left(str, 3) 'Select数据类型
Case "msg"
LogAdd Mid(str, 4)
Case "inf"
Case "cmd"
End Select
End Sub 展开
收到请求后Load一个WinsockList(n)来Accept请求
建立连接之后都使用这个控件数组通讯。
问题来了,客户端多开后只有最后登录的一个客户端能收到服务端发出的信息,为了实验方便我采用的Timer空间做时钟信号。枚举控件数组的所有元素,当状态为7的时候发送心跳包。
这是服务器的时钟信号部分的代码
Dim j As Long
j = 1
Do While j < WinsockList.Count
LogAdd j & "号机状态为" & WinsockList(j).State
If WinsockList(j).State = 7 Then
WinsockList(j).SendData "msg你是" & j & "号机 这是生命探测系统" & Time & "发出"
LogAdd "时钟信号" & Time & "给" & j & "号机"
Else
LogAdd j & "号机断开"
End If
j = j + 1
Loop
确定每一个状态为7的链接都执行了循环的,但是出最后登录的一个客户端以外,其他都没反应。注意是没反应而不是连接断开。
下边是客户端的部分代码
Private Sub Winsock_DataArrival(ByVal bytesTotal As Long)
Dim str As String
Winsock.GetData str '获取数据
LogAdd "接到数据"
Select Case Left(str, 3) 'Select数据类型
Case "msg"
LogAdd Mid(str, 4)
Case "inf"
Case "cmd"
End Select
End Sub 展开
3个回答
展开全部
我觉得你这样写,方法可能不好
应该是一个监听,当有消息来的时候,创建一个新的控件来接听,原来的控件仍然在监听
好像如此,我记不太清了
应该是一个监听,当有消息来的时候,创建一个新的控件来接听,原来的控件仍然在监听
好像如此,我记不太清了
更多追问追答
追问
我就是这样写的啊!
WinsockHost一直都在Listen
接受请求的是WinsockList(n)
追答
动态生成控件是这样的:load winsockhost
所以,你根本就没有动态的响应来的消息
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不是你提供的这部分代码的原因。
追问
哎?
时钟信号就是第一段代码发出的。。。不是他的原因叫我情何以堪。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询