解决方案 »

  1.   

    这个不是丢包,是粘包问题。
    调用一次send不一定能将你的整个结构体发过去,也就是发送的实际字节数可能比ARRAY_LENGTH小,同样调用一次recv不一定能完整接受一个结构体,实际接受字节数可能比ARRAY_LENGTH小。
    应当检查send和recv的返回值,以确认整个结构体是否完全发送或完全接受。
      

  2.   

    我大致发现以下问题:
    1、你发送的数据长度是ARRAY_LENGTH+1,而你接收的数据长度ARRAY_LENGTH,会导致你的数据错乱。
    2、send函数没有对返回值进行处理,你并不知道send是否成功,到底发送了多少长度的数据出去。
    3、recv函数也没有对返回值进行处理,你也不知道到底接受了多少长度的数据,recv是否成功。
    4、TCP是存在丢包的可能性的,所以你需要让接收端返回确认包。你的丢包是因为你不知道这笔数据是否发送成功,你处理好返回值和确认包的问题,你的程序就比较稳定了。
      

  3.   


    如果是非阻塞,send函数和recv函数需要对返回值进行处理,如果是阻塞,不需要对函数返回值进行处理吧
      

  4.   


    如果是非阻塞,send函数和recv函数需要对返回值进行处理,如果是阻塞,不需要对函数返回值进行处理吧
    也是有可能出错的,你最好是处理返回值。