如题,在百度上查了下,大概如下:
一是对于发送方引起的粘包现象,用户可通过编程设置来避免,TCP提供了强制数据立即传送的操纵指令push,TCP软件收到该操纵指令后,就立即将本段数据发送出往,而不必等待发送缓冲区满;二是对于接收方引起的粘包,则可通过优化程序设计、精简接收进程工作量、进步接收进程优先级等措施,使其及时接收数据,从而尽量避免出现粘包现象;三是由接收方控制,将一包数据按结构字段,人为控制分多次接收,然后合并,通过这种手段来避免粘包。我想问有木有代码实现呢?如果只是理论的话,我又不知道怎么编写!
先谢谢过了!

解决方案 »

  1.   

    |-pkg_len,4bytes-|-data-|-pkg_len,4bytes-|-data-|
    |-------------------tcp stream------------------|
      

  2.   

    我写的有点复杂了,里面有我定义的结构和逻辑怕把你绕晕了。
    大体是这样
    new byte[1000]
    ...将发送的数据填充到这里面,如果你的内容不够1000,那就用其他数据把他填充到1000,填满后size一定要是1000然后发送出去。,(前面1-10位置可以定义为结构头,里面可以记录这个包有效的实际数据长度是多少,用于区分无效数据)
    接收方每次接收1000个字节再处理,接收<1000就继续等待循环接收。你先理解思想慢慢捉摸。