用vb中winsock接受数据时经常会少接收第一个字节,求解决办法

解决方案 »

  1.   

    不知道有多少前人掉在TCP Socket
    send(人多)send(病少)send(财富)
    recv(人多病)recv(少财富)
    陷阱里面啊!
    http://bbs.csdn.net/topics/380167545
      

  2.   

    Private Sub sckclient1_DataArrival(ByVal bytesTotal As Long)Dim thestring As String
    Dim strdata() As ByteDim pos As Integer sckclient1.GetData strdata(), vbArray Or vbByteFor pos = 0 To UBound(strdata)
        thestring = thestring & "-" & strdata(pos) & "-"
    这是我的接收过程
      

  3.   


    没看明白,这是我的代码
    Private Sub sckclient1_DataArrival(ByVal bytesTotal As Long)Dim thestring As String
    Dim strdata() As ByteDim pos As Integer sckclient1.GetData strdata(), vbArray Or vbByteFor pos = 0 To UBound(strdata)
        thestring = thestring & "-" & strdata(pos) & "-"我用网络调试助手调试时能正确接收,所以应该是接收没有处理好,请指点一下
      

  4.   

    一次多少数据?Winsock除非缓冲区溢出,一般不容易丢数据。
    多加些 Debug.Print,看看 bytesTotal、UBound(strdata)、thestring 是否正常。
      

  5.   

    Private Sub sckclient1_DataArrival(ByVal bytesTotal As Long)Dim thestring As String
    Dim strdata() As ByteDim pos As Integer
    ReDim strdata(bytesTotal-1)
     sckclient1.GetData strdata(), vbArray Or vbByteFor pos = 0 To UBound(strdata)
        thestring = thestring & "-" & strdata(pos) & "-"
      

  6.   

    一次4个字节  
    概念错误。Tcp是流。不知道有多少前人掉在TCP Socket
    send(人多)send(病少)send(财富)
    recv(人多病)recv(少财富)
    陷阱里面啊!
    http://bbs.csdn.net/topics/380167545
      

  7.   

    无知!DataArrival收到包就触发。4字节不会再分包了。
      

  8.   

    无知!DataArrival收到包就触发。4字节不会再分包了。
    发送端发送4字节,接收方可能DataArrival
    1+1+1+1
    2+1+1
    3+1
    1+2+1
    1+1+2
    1+3
    2+2
    3+1
    4
      

  9.   

    不会。
    WinSock两次发送只有一次DataArrival倒是有可能的,不会把4字节拆成多个包。
    WinSock不是串口!
    WinSock不是串口!
    [size=32px]WinSock不是串口![/size]
      

  10.   

    设TCP底层缓冲区默认大小为4096字节。
    一次发送被拆成多次DataArrival的原因在于这次发送的内容刚好跨TCP底层缓冲区的本次末尾和下次开头。
    也许永远不可能
    1+1+1+1

    4095+1+3+...
    4094+2+2+...
    4093+3+1+...
    的可能还是很大嘀!