我在写个winsock互联网服务器发送数据到客户端的程序出现个问题!!!本地调试通过没有任何问题!!但是在远程服务器发送时,客户端收到的数据不完全,如文字信息,缺少很多收不全,这是怎么回事啊!!需要怎么解决???我的程序是在客户端发出请求到服务端后既发送今日的消息到客户端!!我在send complete里设置了检测,那里检测发送成功,但是客户端接受到的却是不完全的信息!!丢了很多文字信息!

解决方案 »

  1.   

    TCP/IP网络在远程传输时会丢包。
    需要加以纠错。
      

  2.   

    用winsock类来写.指定协议的检验标准.
      

  3.   

    可能是用 winsock 的通病吧,只要你的程序一端是 win2000 另外一端是 win98 ,怎么传都会丢数据,偶晕~~~~~~~
      

  4.   

    tcp/ip传送么?转进--->网络版面
      

  5.   

    朋友们帮我顶那!!!!!!!!!我刚查了一下winsock的资料不知道如果分段传输可以不可以解决这问题,逻辑是把太长的信息截成2段发送,如 winsock1.send text1.text winsock1.send text2.text
    然后在客户端收到2端信息后应该会自动拼起来不知道这样做能不能解决这个收信息的问题!!! 有高手就出来指教一下啊!!!最好带上代码啊!
      

  6.   

    丢包有2种原因 
    1。选用的协议 如果使用upd协议的话会造成丢包,因为udp本身没有找包的协议
        建议:采用tcp协议 因为tcp协议可以自动找包
    2。超过81**字节,具体我也记不住,
        解决方法:拆包,在每个包+上4位包头(包的大小),接收端接包后根据包头判断是否丢包
    丢包就叫发送端从法,如果没有丢的话就继续发
    注意:发送端接到是否重发的事件后在判断下一个该发什么包,反正我是实现了,不过我传的是2进制,懒得改,反正方法是这样的,根据思路自己写吧    
    -------拆包dim LenFile as long
      Public Function SplitFile() As Long
            On Error Resume Next
            Dim GetCount As Long
            
            '计算出这次可发送的字节数
            If LenFile >= 8000 Then
            GetCount = 8000
            LenFile = LenFile - GetCount
            Else
            GetCount = LenFile
            LenFile = LenFile - GetCount
            End If
            '-----------------------------------------'-----------------------------------------
            SplitFile = GetCount
             End Function
      

  7.   

    我说的第2个原因适用于udp,tcp的话不需要,但是拆包还是需要的
      

  8.   

    http://wlbookwl.myrice.com/jck/1026%20Winsock.htm
      

  9.   

    分段发送文件:
    定义文件缓冲区:dim btsend(8192) as byte
    将文件读入一个变量,获得文件大小.
    每次取出8192字节发送。。
    接收文件:
    定义一个字节型数组变量来保存文件,每接收到一个包先定义到文件尾(用seek函数定义文件尾),然后把接收到的信息写入数组变量
      

  10.   

    用的是tcp协议!!!我发代码给大家看看
    If w1.State <> sckClosed Then w1.Close
    w1.Accept requestID
    Text3.Text = "IP:" + w1.RemoteHostIP + "请求建立连接中"
    If i = 1 Then
    Text1.Text = Text1.Text & vbCrLf & "IP:" & w1.RemoteHostIP & " " & Date & " " & Time & " 端口号:" & w1.RemotePort & "建立连接"Else
    End If
    cishu = cishu + 1
    Label4.Caption = "到目前为止连接用户数量:" & cishu + 1
    w1.SendData text2_text看看需要怎么改良!可以解决丢失的问题!!!!
      

  11.   

    Private Sub w1_SendComplete()
    If list_index = 1 Then
    List1.AddItem "发送数据给:" & w1.RemoteHostIP & "  端口:" & w1.RemotePort & "完毕"
    Else
    End If
    w1.Close
    w1.Listen
    End Sub