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

检测TCP流中的某个字符串(命令),tcp,stream,protocols,tcp-ip,Tcp,Stream,Protocols,Tcp Ip,我正在TCP之上开发一个协议。我想知道在这种情况下检测控制消息的最佳方法是什么。 例如: 客户端发送控制消息START。 服务器发送数据,然后发送控制消息END。 客户端检测到结束并关闭连接 问题是“结束”可能是支离破碎的。因此,客户可能最终阅读ABCDEN,然后阅读D。 在这种情况下,检测控制消息“END”的最佳方法是什么 注意:服务器不知道它将发送的总字节数 TCP是一个字节流,它没有消息边界的概念,因此必须在协议中对消息进行分隔。然后,消息的接收者可以查找分隔符,以了解一条消息的结束位置和

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

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

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


注意:服务器不知道它将发送的总字节数

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

看看HTTP如何使用分块编码。或者MIME如何使用边界