我一直没有弄清一个问题:
tcp协议是流式的,没有边界。那么在通信中接收方
如何有效的边界确认,比如我要发送很多不同的结构体、不同的数据等
给对方,那接收方如何区分出不同的结构体?如何接收到正确的数据大小?
这可能是一个自定义应用层协议包格式的问题,不知道有这方面
经验的朋友,是如何做的?能否给在下指点一下。
tcp协议是流式的,没有边界。那么在通信中接收方
如何有效的边界确认,比如我要发送很多不同的结构体、不同的数据等
给对方,那接收方如何区分出不同的结构体?如何接收到正确的数据大小?
这可能是一个自定义应用层协议包格式的问题,不知道有这方面
经验的朋友,是如何做的?能否给在下指点一下。
例如发送邮件时,先将邮件BASE64编码,编码后的数据中只有A-Z,a-z,0-9,+/
等字符中间可以加入换行符\r\n,而协议规定,如果在单独一行上只有一个"."则表示数据传送完成。即当你收到的最后五个字节是"\r\n.\r\n",则表示数据传送完成。
所以一种方式就是用某种特殊的序列作为你的结束符,但要保证这些序列不会出现在你要发的数据中。如果你的数据中出现了结束符序列,则你要改一下它。例如你定义结束序列为DLE ETX在发送方、在数据中,凡遇到一个DLE字符,就增加一个DLE字符。这样外,数据域中的DLE个数均为偶数。所以接收方收到这数据流时,如果奇数DLE后接ETX字符,就知道数据传送完成了。
另一种方式就是在传送一段数据前先送这段数据的长度,这样,接收方也知道什么时候数据传完了。