接收部份:Public Sub Winsock1_DataArrival(bytesTotal as long)
Dim s as string
Winsock1.GetData s,vbString
Text1=s
End sub这个时候,如果向它发送一个很大的包。程序就会报错“10040 数据报文太大,不能装入缓冲区并被截断”。如果我在Winsock1.GetData s,vbString的上一行加上IF bytesTotal>4096 then exit sub则收大数据包时会死机。请问应该怎么解决?如何才能成功的收取这个大数据包?

解决方案 »

  1.   

    接收数组或字符串时,加上最后的 maxLen 参数。
    Public Sub Winsock1_DataArrival(bytesTotal as long)
    Dim s as string
    Winsock1.GetData s, vbString, bytesTotal
    Text1=s
    End sub
      

  2.   

    //包udp的话最好小于1.49l
    为什么?
      

  3.   

    of123() 你说的情况我知道的,可是,当收到一个很大的UDP包时,即使是Winsock.GetData s,vbString,10也会出现那种错误,这是怎么回事啊?
      

  4.   

    如果包比较大,最好用UDP作为连接侦听,发送小的Message指令。不要发送数据报。因为UDP连接不稳定。
    大的数据报最好用TCP/IP。
      

  5.   

    可是如果使用UDP协议侦听的话,再碰上一个破坏份子向我的Server的UDP端口上发送大量数据包,我不就必死机无遗了吗?我想跳过这个很大的数据包都没有办法啊。因为一旦GetData s就会死机。这该怎么办啊?我试了,连PeekData s都会死机。是我电脑的问题吗?还是本来就是这样的?