65,206
社区成员
发帖
与我相关
我的任务
分享
勤人是懒人的奴隶!
[/quote]
谢谢,但是又想到个问题,如下:
比如客户端某次传来消息,包头定义包体长度应该为10,可包体长度却是20(假设某次代码级异常导致)。
这样会导致之后所有的消息均错误读取包头位置。(把上次的消息内容当消息头读取)。
请问这种情况在无终止符设计时如何处理?无解么?
[/quote]
比如客户端某次传来消息,包头定义包体长度应该为10,可包体长度却是20(假设某次代码级异常或下一个包粘到本包后面(属正常现象)导致)。
将后面多余出来的10个字节作为后续新包头解析。
[/quote]
将后面多余出来的10个字节作为后续新包头解析。
那这样的话,将本不是包头的字节当包头解析肯定是错误的。
也就是在错包后的所有包均无法正确解析,此连接也就废掉了。
那结论如下:
1:当包协议定义为无终止符情况下,如果一旦发生长度不一致的错包,就无法程序自动纠错,只能人为发现修改程序后再次连接操作。
2:当包协议定义为有终止符情况下,除非连接两端增加转码或对终止符替换等操作外,否则会出现终止符不唯一的情况,也会导致部分包无法正确解析。
那这样看来,有终止符的貌似好一些,不会发生一个错包导致后续全部失效的情况。

勤人是懒人的奴隶!
[/quote]
谢谢,但是又想到个问题,如下:
比如客户端某次传来消息,包头定义包体长度应该为10,可包体长度却是20(假设某次代码级异常导致)。
这样会导致之后所有的消息均错误读取包头位置。(把上次的消息内容当消息头读取)。
请问这种情况在无终止符设计时如何处理?无解么?
[/quote]
比如客户端某次传来消息,包头定义包体长度应该为10,可包体长度却是20(假设某次代码级异常或下一个包粘到本包后面(属正常现象)导致)。
将后面多余出来的10个字节作为后续新包头解析。
勤人是懒人的奴隶!
[/quote]
谢谢,但是又想到个问题,如下:
比如客户端某次传来消息,包头定义包体长度应该为10,可包体长度却是20(假设某次代码级异常导致)。
这样会导致之后所有的消息均错误读取包头位置。(把上次的消息内容当消息头读取)。
请问这种情况在无终止符设计时如何处理?无解么?
勤人是懒人的奴隶!
