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
展开
 我来答
alsjzhao
2011-07-26 · TA获得超过252个赞
知道小有建树答主
回答量:266
采纳率:0%
帮助的人:169万
展开全部
在每一个 SendData 方法的下一条语句处加上 DoEvents
因为控件在发送数据时 程序执行权限不在发送上 导致后一条发送数据被覆盖或未执行
在发送数据方法的下一条语句加 DoEvents 关键字为了转交执行权限 使得数据发送完成后返回调用者继续执行

WinsockList(j).SendData "msg你是" & j & "号机 这是生命探测系统" & Time & "发出"
DoEvents
吉利吴
2011-07-12 · TA获得超过220个赞
知道小有建树答主
回答量:415
采纳率:0%
帮助的人:216万
展开全部
我觉得你这样写,方法可能不好
应该是一个监听,当有消息来的时候,创建一个新的控件来接听,原来的控件仍然在监听
好像如此,我记不太清了
更多追问追答
追问
我就是这样写的啊!
WinsockHost一直都在Listen
接受请求的是WinsockList(n)
追答
动态生成控件是这样的:load winsockhost
所以,你根本就没有动态的响应来的消息
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友1b92564
2011-07-12
知道答主
回答量:29
采纳率:0%
帮助的人:12万
展开全部
不是你提供的这部分代码的原因。
追问
哎?
时钟信号就是第一段代码发出的。。。不是他的原因叫我情何以堪。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式