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如果同时发多条信息最好的办法是什么呢?难道用时间控件来处理?

解决方案 »

  1.   

    For i = 1 To 6
     Winsock1(i).SendData "File|abc"
     DoEvents
    Next i
    这样从发送端来看虽然没什么问题,不过接收端来不及处理的话还是会出问题
      

  2.   

    我用啦 DoEvents这个语句,还是会出现,除非加一个MSGOBX “AA” 贴连的问题最好的方法是接收端收到后给发送端回复一条信息,发送端收到该回复后才继续发送下一条
    这个方法,太麻烦啦,还有其他的方法吗?如上面的说法院和winsock的buffer
      

  3.   

    For i = 1 To 6
     sleep(5)'5毫秒应该够了,可以自己调试 
     DoEvents
     Winsock1(i).SendData "File|abc"
    Next i
      

  4.   

    sleep(5)'5毫秒应该够了,可以自己调试 
    天啊,这是什么语句啊,VB里没有这个语句的啊,这个好像在QB才有的
      

  5.   

    sleep是需要声明才可以使用的:
    Private Declare Sub Sleep Lib "kernel32" Alias "Sleep" (ByVal dwMilliseconds As Long)
      

  6.   

    其实wisock的编程有点特殊 不能使用sleep因为使用sleep就会造成系统不能接受下一个消息
    //最好的方法是接收端收到后给发送端回复一条信息,发送端收到该回复后才继续发送下一条
    这个方法虽然可行 但是 很慢 
    造成这个情况的主要原因是winsock,senddate其实不是直接发送 而是 给发送指令 发送给网卡的缓存 网卡在想马上发送这条消息的时候第2条指令又发送到缓存 造成了数据的连接 接受也是同理 因此并发的造成有可能是发送端 也有可能是接受端
    解决的方法还有一个
     Winsock1(i).SendData "File|abc" & "@#$@$@%^#^#$^"
    "@#$@$@%^#^#$^"是特殊符号 接受以后用split(字符串,"@#$@$@%^#^#$^")猜分
      

  7.   

    只要sleep(0)就可以。
    sleep(0)起了一个告诉操作系统, 强制让出执行线程,切换到别的线程去发送。
      

  8.   

    使用sleep(0)是失败的,我加到sleep 1000 也是不行
    这个朋友提了这样的方法,我其实早是这样做的
     Winsock1(i).SendData "File|abc" & "@#$@$@%^#^#$^"File|abc 其中"|"就是做猜分的
    关键是
    Winsock1(1)
    Winsock1(2)
    Winsock1(3)
    控件数组分别是,连了10个连接的,现在我的操作是,同时向10个连接的IP,发送同一条信息"File|abc"现在的效果是,10个客户端也可以同时收到信息,但是信息产生了"File|abc"10个相同的字符串连在一起
      

  9.   

    Winsock1(1).senddate 
    doevents
    这个最好也加上 再加上 你的"@#$@$@%^#^#$^"
    接受以后后就好处理了