首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

关于一段VB网络编程代码的提问,帮帮忙啊

2012-01-19 
关于一段VB网络编程代码的提问,各位高手帮帮忙啊,急急!请高手帮我解释一下。这段代码是怎么实现功能的。Priv

关于一段VB网络编程代码的提问,各位高手帮帮忙啊,急急!
请高手帮我解释一下。这段代码是怎么实现功能的。
Private Sub WskServer_DataArrival(Index As Integer, ByVal bytesTotal As Long)
'用GetData方法获取激活的连接所发送的数据,同时转发此数据给所有的客户端,实现类似“聊天室”那样的功能。
WskServer(Index).GetData Str, , bytesTotal
List1.AddItem "来自" & WskServer(i).RemoteHostIP & "的消息:" & Str
For i = 1 To S_Max
  If WskServer(i).State = sckConnected Then
  WskServer(i).SendData Str
  DoEvents 尤其是这段代码,到底是什么意思。实现什么功能,还有DoEvents究竟怎么使用?
  End If
Next i
End Sub
在这段代码中,主要是实现的服务端在接收到客户端的信息后将其显示出来,并且将信息传给其它的客户端。
但是我不懂这段代码究竟是怎么实现这个功能的(代码的工作原理),可不可以请高手指点迷津,谢谢了!!!


[解决办法]
DoEvents可以放在WskServer(i).SendData Str的前面后者后面。不放的话,楼主可以试试看,你的客户端一个都不会收到应有的信息。
为什么呢?其实是这样的,因为winsck的工作是异步的,这样问题就来了,首先,程序执行落入你的for循环,此时,执行了WskServer(1).SendData Str ,这时候,WskServer(1)开始发送报文了,然而刚才说了“winsck的工作是异步的”,程序并不会等待WskServer(1)返回后再执行下一行语句,而是直接进入下一个循环,也就是WskServer(2)也发送报文了,依次WskServer(3)、WskServer(4)、WskServer(5)、....WskServer(S_Max),这样,相邻两个winsck进行报文发送的时间是相当短的(可能连1ms都不到),主线程早就忙得满头大汗了,主线程直接卡死、死锁了...程序其实已经狗P掉了...

热点排行