我一直没有弄清一个问题:
tcp协议是流式的,没有边界。那么在通信中接收方
如何有效的边界确认,比如我要发送很多不同的结构体、不同的数据等
给对方,那接收方如何区分出不同的结构体?如何接收到正确的数据大小?
这可能是一个自定义应用层协议包格式的问题,不知道有这方面
经验的朋友,是如何做的?能否给在下指点一下。

解决方案 »

  1.   

    自己定义边界符号。
    例如发送邮件时,先将邮件BASE64编码,编码后的数据中只有A-Z,a-z,0-9,+/
    等字符中间可以加入换行符\r\n,而协议规定,如果在单独一行上只有一个"."则表示数据传送完成。即当你收到的最后五个字节是"\r\n.\r\n",则表示数据传送完成。
    所以一种方式就是用某种特殊的序列作为你的结束符,但要保证这些序列不会出现在你要发的数据中。如果你的数据中出现了结束符序列,则你要改一下它。例如你定义结束序列为DLE ETX在发送方、在数据中,凡遇到一个DLE字符,就增加一个DLE字符。这样外,数据域中的DLE个数均为偶数。所以接收方收到这数据流时,如果奇数DLE后接ETX字符,就知道数据传送完成了。
    另一种方式就是在传送一段数据前先送这段数据的长度,这样,接收方也知道什么时候数据传完了。
      

  2.   

    楼上所说的方法是可以的,在<<电脑编程技巧与维护>>2001年12期20页有一篇关于这个问题的详细文章,并且有演示代码,可以在其网站 www.comprg.com.cn上下载得到!
      

  3.   

    用楼上的方法是可以的,在<<电脑编程技巧与维护>>2001年12期20页有关于该问题的详细介绍,并且有演示代码,在其网站 www.comprg.com.cn上有下载。