我已经试验了两个程序之间的异步TCP套接字消息,用于传递数据,数字和/或文本。我所做的是在每封邮件的开头使用一个关键字,然后用“|”分隔这些值。字符。因此,一个消息可能是这样的:如何分离TCP套接字消息
“数据| 490 | 40517.9328222222 | 1 | 6 | 11345 | 11347 | 11344 | 11345 | 106 | 40517.8494212963”
我设置读取缓冲区大小为1024,作为最的消息将在这个长度内。但是有时我可能会发送很多短消息,其中几个消息的长度小于1024个字符,看起来它会一次读取。如果我发送超过1024个字符的消息,它将被拆分。所以我正在寻找一些关于如何处理这个问题的建议。我应该使用一些特殊字符来开始和/或结束每封邮件吗?希望你对此有所建议。
谢谢!序列化意味着什么?它适用于标准的Windows操作电脑吗?有了你最后的评论,这是否意味着我应该根据收到的消息更改缓冲区大小?这将如何工作。由于消息的长度在消息已经被读取之前是未知的,所以我不明白你的意思。顺便说一句,是否有必要在发送方分解消息,还是不会影响性能?大小将是每200毫秒50个字符的消息,并且很少有50,000-400,000个字符的消息。 – bretddog 2010-12-06 11:27:59
序列化仅意味着“以字符串形式输出”。 @terminus的建议将是一种合理的方式 - 将消息长度转换为固定长度的字符串,以便在接收端轻松转换回'unsigned int'。您可以请求先将这么多字节读入一个固定大小的缓冲区,然后分配一个缓冲区来接收剩余的消息。不要在发送端分割消息 - TCP/IP堆栈将执行任何所需的分组。 – 2010-12-06 12:28:51