Winsock1控件的Protocol = sckTCPProtocol
代码以下,在同一时内Winsock1数组控件向不同的连接,同时发送一个"File|abc"字符串。
奇怪的是,接收端居然接收到字符串是File|abcFile|abcFile|abcFile|abcFile|abcFile|abc
For i = 1 To 6
Winsock1(i).SendData "File|abc"
Next i
听讲这些叫贴连问题,但我在语句里加了 DoEvents还是不行,
但如果把代码改成这样,接收端才可以正确接收到"File|abc"这样的字符串,为什么呢?百思不得其解
For i = 1 To 6
msgbox "a" '作停顿使用
DoEvents
Winsock1(i).SendData "File|abc"
Next i如果同时发多条信息最好的办法是什么呢?难道用时间控件来处理?
代码以下,在同一时内Winsock1数组控件向不同的连接,同时发送一个"File|abc"字符串。
奇怪的是,接收端居然接收到字符串是File|abcFile|abcFile|abcFile|abcFile|abcFile|abc
For i = 1 To 6
Winsock1(i).SendData "File|abc"
Next i
听讲这些叫贴连问题,但我在语句里加了 DoEvents还是不行,
但如果把代码改成这样,接收端才可以正确接收到"File|abc"这样的字符串,为什么呢?百思不得其解
For i = 1 To 6
msgbox "a" '作停顿使用
DoEvents
Winsock1(i).SendData "File|abc"
Next i如果同时发多条信息最好的办法是什么呢?难道用时间控件来处理?
Winsock1(i).SendData "File|abc"
DoEvents
Next i
这样从发送端来看虽然没什么问题,不过接收端来不及处理的话还是会出问题
这个方法,太麻烦啦,还有其他的方法吗?如上面的说法院和winsock的buffer
sleep(5)'5毫秒应该够了,可以自己调试
DoEvents
Winsock1(i).SendData "File|abc"
Next i
天啊,这是什么语句啊,VB里没有这个语句的啊,这个好像在QB才有的
Private Declare Sub Sleep Lib "kernel32" Alias "Sleep" (ByVal dwMilliseconds As Long)
//最好的方法是接收端收到后给发送端回复一条信息,发送端收到该回复后才继续发送下一条
这个方法虽然可行 但是 很慢
造成这个情况的主要原因是winsock,senddate其实不是直接发送 而是 给发送指令 发送给网卡的缓存 网卡在想马上发送这条消息的时候第2条指令又发送到缓存 造成了数据的连接 接受也是同理 因此并发的造成有可能是发送端 也有可能是接受端
解决的方法还有一个
Winsock1(i).SendData "File|abc" & "@#$@$@%^#^#$^"
"@#$@$@%^#^#$^"是特殊符号 接受以后用split(字符串,"@#$@$@%^#^#$^")猜分
sleep(0)起了一个告诉操作系统, 强制让出执行线程,切换到别的线程去发送。
这个朋友提了这样的方法,我其实早是这样做的
Winsock1(i).SendData "File|abc" & "@#$@$@%^#^#$^"File|abc 其中"|"就是做猜分的
关键是
Winsock1(1)
Winsock1(2)
Winsock1(3)
控件数组分别是,连了10个连接的,现在我的操作是,同时向10个连接的IP,发送同一条信息"File|abc"现在的效果是,10个客户端也可以同时收到信息,但是信息产生了"File|abc"10个相同的字符串连在一起
doevents
这个最好也加上 再加上 你的"@#$@$@%^#^#$^"
接受以后后就好处理了