因为发送数据实际上由操作系统控制,你Send后,不一定真实的发送出去,具体发送由系统调度。向上所述,一定会出现你所说现象,解决方法就是定为一个数据发送协议,如:
头“7e"1B,信息长度 4B Long型,信息,结束标志 1B

解决方案 »

  1.   

    呢用的肯定是tcp协议,需要自己来保证数据报的完整,最简单的办法定义一个结构
    typedef struct 
    {
      DWORD dwLen; //你发的数据包的长度
      BYTE * pData; //实际数据
    }接受数据时,先读出长度,然后需要自己判断,如果不是一个完整的数据报则先放在一个缓存里可以,还有一些细节性的东西要注意一下就可以了
      

  2.   

    to:
    meteorshower(流星宇) 
               还有什么细节问题?

         UDP协议和TCP有什么不同吗?
      

  3.   

    做应用层协议的时候需要分清楚网络层数据包和应用层数据包,网络层数据包的定界和应用层数据包的定界是不一样的,在应用层需要自己去定界,
    不能利用网络层的定界,否则就会出错。一个应用层定界的例子:
    在http协议中,以此应用层会话分两个部分,应用层协议头部,和应用层协议内容
    头部的结束标记是"\r\n\r\n",
    应用层内容部分的结束标记通过协议头部的表示来决定。
    协议头部有内容长度的标识,根据这个表示就可以确定本次会话到什么时候结束。smpt协议中结束标记是\r\n,非常类似。
      

  4.   

    在传送路径上有一个最大传送单元(MTU),包长度超过此值就会被分片。有一些手段可以找出路径MTU,以太网上一般不超过1500。
      

  5.   

    我用SOCKET,大概是在网络层上吧。
    你们说的过于深奥,我实在不是很明白,
    我想知道用TCP 传送,和用UDP传送都回遇到这个问题吗?
      

  6.   

    MTU 的问题吧!大的数据报必然被拆开
      

  7.   

    方法?方法不是大家都说了么?
    1。用UDP协议,UDP协议本身保证数据包的完整性,你不必操心——但包的顺序它不保证;
    2。用TCP协议,需要自己定义更高层的协议实现数据包传送,例如给包头加入“包大小”之类的字段,这种情况“包”的顺序可以保证,但分包、组包的工作必须你自己用程序完成。