【发布时间】:2017-10-11 20:18:51
【问题描述】:
我正在使用java NIO,我想给播放器发送一条消息,然后立即发送另一条消息。
所以我只是连续发送 2 条消息:
server.send("message 1");
server.send("message 2");
客户端收到消息:
client.read(buffer)
所以缓冲区看起来像这样:
message1+message2
我希望客户将其视为 2 条消息, 问题是我连续两次写入流,客户端一次读取所有流,并获取所有数据(2条消息),就像一条消息一样。
有没有办法检查流是否为空,并且只有在它为空时才写入第二条消息?
【问题讨论】:
-
分隔您的消息,例如使用换行符,然后逐行阅读。
-
是的,但是当我使用“socketchannel.read”方法时,它会读取我所有的流吗?我该如何限制它?
-
在每条消息之前发送一个标头,包含消息中的字节数。
-
如果您使用 TCP,则由您负责将流结构化为消息。如果您使用 UDP,则由您负责消息重复/错过/排序.任何协议都有工作要做,两者都只是(相对较低级别的)基础设施。