本帖最后由 VisualEleven 于 2011-03-01 08:46:09 编辑

解决方案 »

  1.   

    发送,接收添加Log日志等来分析
    接收端收到数据时,也可能你覆盖
      

  2.   

    你是怎么发的 如果不是异步方式发送,又复用了一个发送缓冲区并且前后读写这个缓冲区没有做同步的话,  不会出现什么数据没发完, 协议栈的缓冲区被复写的情况。每天n多的应用在用他的协议实现,怀疑协议实现会出这种bug毫无理由。
    还是应该从自己应用的一层来找问题 
      

  3.   

    是不是你服务器端接收数据的处理存在问题,Debug下调试一下看看
      

  4.   


    TCP缓冲区确实不会有被覆盖问题。你自己写文件是否有覆盖行为出现,可以检查检查
    你用writefile发送时会不会有问题
      

  5.   

    TCP发包,可能由于网络问题会乱序,把包编号,再组.
    哪一个包损坏了或者缺了,重新请求再发一次.
      

  6.   

    问题解决了,是由于我在客户端发送是以一个一个结构体来封装数据之后再发送的,而在服务器接收数据时,在某种概率下,读到的数据包不是一个结构体,数据是结构体的一小部分,导致我的代码解释数据出现错误//===============================================================================
    (我猜测是因为TCP内核缓冲区是一个循环数组,当程序读取缓冲区里面的数据读到末尾时,即使数据没有达到指定的count个字节也会立即返回,而不是越过尾部,从头部接着读够count个字节再返回,不知道我这个猜测对不对?)我服务器端用的是read(socketfd,buffer,readbytes)来读取,后来改成recv(socketfd,buffer,readcounts,MSG_WAITALL)就没问题了,因为后者能够保证程序一直阻塞,直到缓冲区读取到的字节数够readcounts时才返回,数据量正好是我的一个结构体的size
    =================================================================================
    换衣大家提提意见
      

  7.   

    原来是分包问题。!!汗!
    看看windows 网络编程技术,可以找到LZ问题的解决方法。很easy!
      

  8.   


    呵呵,我在linux下的,不过原理都一样