【发布时间】:2017-10-16 22:10:21
【问题描述】:
我有一个接收tcp消息的socket服务器(用c++写的),这些消息是已经放气的数据。
由于放气(压缩)方法,这些消息可能包含“空”(0)字符。
数据的表示示例(字符转换为 int 并用逗号分隔):
141、208、59、10、128、80、12、68、209、222、197、72、94、94、190、 100, 55, 246, 86, 238, 31, 212, 82, 81, 50, 76, 49, 205, 169, 238, 182、31、75、114、13、73、37、158、162、90、170、171、120、90、197、 117、164、81、116、239、97、162、55、54、0、35、128、241、222、56、 1, 102, 2, 198, 0, 147, 189, 9, 6, 12, 208, 57, 128, 206, 249, 238, 236, 31, 70, 0, 227, 173, 81, 34, 192, 76, 192, 24, 96, 178, 55、131、127、204、9、0
正如您在上面的示例中看到的那样,“null”(0)表示在实际结束之前。
所以使用时:
message_size = read( client, buffer, 4096 )
读取在第一个“null”(0) 处返回。
是否可以继续阅读以便我收到整个消息?
或者这里有什么魔术可以做?
编辑:使用 Linux Centos (2.6.32-642.6.2.el6.x86_64)
【问题讨论】:
-
当 read 返回 > 0 时,继续阅读吗?
-
我已经尝试过您的建议 Gill Bates,但问题仍然存在。只收到消息的第一部分。
-
如下所述,该函数不会在 NUL 上停止。
-
您需要创建一个minimal reproducible example
-
您是否正在使用 C 系列字符串函数将该缓冲区转换为(以 NUL 结尾的)字符串?