检测TCP流中的某个字符串(命令)

时间:2014-09-29 08:17:12

标签: tcp stream protocols tcp-ip

我正在开发一个基于TCP的协议。我想知道在这种情况下检测控制消息的最佳方法是什么。 例如:

客户端发送控制消息START。 服务器发送数据ABCD,然后发送控制消息END。 客户端检测到END并关闭连接

问题是“结束”可能会分散。因此,客户可能最终会阅读ABCDEN,然后是D. 在这种情况下,检测控制消息“END”的最佳方法是什么?

注意:服务器不知道它将发送多少字节!

1 个答案:

答案 0 :(得分:3)

TCP是一个字节流,它没有消息边界的概念,因此您必须在协议中分隔您的消息。然后,消息的接收者可以查找分隔符以知道一个消息的结束和下一个消息的开始。对于您所展示的基于文本的协议,CRLF(回车后跟换行符)是许多基于文本的Internet协议中常用的分隔符,包括HTTP,FTP,POP3,SMTP等。在可变长度数据的情况下,如果无法提前发送数据大小,则仍需要数据结束分隔符。在您的示例中,在数据作为分隔符后发送"\r\nEND\r\n"