TCP接收数据损坏

时间:2018-12-10 03:51:03

标签: tcp protocol-buffers

情况是:我有一个用c编写的TCP服务器,用Java编写的TCP客户端(android应用),使用google protobuf进行序列化/反序列化;服务器每秒将数据发送到客户端以进行显示。数据包含(为简单起见)attribute1 / attribute2 / attribute3,客户端需要显示带有attribute1 / attribute2 / attribute3的确切数据。数据大小超过1480bytes,并且每秒变化。

问题是:TCP客户端无法获得偶尔显示的确切数据;例如,attribute3是一个字符串,例如“ 2018-12-10 12:00:00”,但TCP客户端仅显示“ 2018-12-”。

已尝试:tcp服务器和客户端无法保证数据大小,因为来自服务器的数据每秒变化一次;而且似乎没有提供由Google protobuf提供的消息的长度。那么,tcp客户端如何获取要显示的确切数据?感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

您需要确定要在TCP连接上使用的消息格式,并在代码中实现该消息格式。 TCP不是消息协议,协议缓冲区会产生消息。

一种常见的技术是为每个消息添加一个四字节的整数作为前缀,以网络字节顺序指示消息的大小。然后,接收方可以读取这四个字节,并知道协议缓冲区消息是多少个字节。

有关更多信息,请参见here