如何分隔TCP套接字消息

bre*_*dog 5 sockets vb.net tcp

我在两个程序之间尝试了一些异步TCP套接字消息,用于传递数据,数字和/或文本.我所做的是在每条消息的开头使用一个关键字,然后用"|"分隔值.字符.所以消息可能如下所示:

"DATA | 490 | 40517.9328222222 | 1 | 6 | 11345 | 11347 | 11344 | 11345 | 106 | 40517.8494212963"

我将读缓冲区大小设置为1024,因为大多数消息都在该长度内.然而,有时我可能会快速发送许多短消息,其中几个小于1024个字符,似乎它将一次性读取.如果我发送的邮件超过1024个字符,它将被拆分.所以我正在寻找一些如何处理这个问题的建议.我应该使用一些特殊字符来开始和/或结束每条消息吗?会很感激你如何做到这一点的一些提示..

Ste*_*end 5

最简单的方法是在每条消息的开头发送消息长度,以这样的方式进行序列化,使其适用于little-endian和big-endian硬件.

这可以帮助您的接收器有效地预分配其接收缓冲区.

  • 序列化只是意味着“作为字符串输出”。@terminus 的建议是一种合理的方法 - 将消息长度转换为固定长度的字符串,以便在接收端轻松转换回“unsigned int”。您可以请求首先将那么多字节读入固定大小的缓冲区,然后分配一个缓冲区来接收消息的其余部分。不必费心在发送端拆分消息 - TCP/IP 堆栈将执行任何所需的打包操作。 (2认同)