在网络通信中,首先按事先约定进行双方通信,由于消息过大, 一般分成几组发送,现在要解决的问题是把收到的消息放到内存中,如何判断一组消息完整了(包括几个消息)?哪位能提供建设性的意见,对于网络编程我想这不是一个新问题了!当然有例子就更好啦

解决方案 »

  1.   

    如果是阻塞的话,用个while 循环里面用 recv,如果消息未发送完 recv应该能继续收取,如果发送完了,recv就会阻塞线程了。如果是非阻塞的,如果是消息模型,收完1组消息后还有没完的下1组来的话会继续触发下一个FD_READ消息,如果完了就不会有下一个FD_READ消息了。
      

  2.   

    在接收端准备一个足够大的缓冲区,然后在发送第一组报文的时候,将msgLen设置为总数据的长度,这样先将接收到的所有数据全部存入这个缓冲区,然后在读取msgLen,以判定本批数据的总长度,这样知道缓冲区内数据的长度>=msgLen时,便将数据一次性取出,而缓冲区后面的数据利用memmove函数向前移动
      

  3.   

    是这样的可能服务器一次向client发很多数据,这些数据组合起来大概有很多组,怎么样来管理这些数据到一定时间如果符合要求并合成它们,如何更好一些请各位兄弟聊聊
      

  4.   

    发送开始时发送一个标志信号 'start' ,全部发送完后发送结束信号'end'
      

  5.   

    可以模仿tcp协议的方法设置一个滑动窗口存储发过来的东西,
    如果提前不知道数据的量,应该设置一个结束标志。
      

  6.   

    tcp协议的分片给了我们一个较好的例子。
    可以设置
    1、一组是否被分开。
    2、设置序号。
    3、分片是否结束。May you succeed!
      

  7.   

    没办法。
    一般采用的是
    1、定长包发送,显然不太可行。
    2、自定义边界。
    比如说以\r\n结束,像POP3协议啦,FTP这些老协议啦一般就是这样做的。
    3、在包头的一个地方放上这个包的总长度或者包的一个类型,从类型判断出总长度。这在游戏和即时消息中用得最多啦,你可以用这种办法吧。