【发布时间】:2021-04-17 10:12:38
【问题描述】:
目前有一个用 Java 构建的 TCP 服务器,我正在使用其套接字的 OutputStream 向客户端发送消息/数据包:
// Send all player's information to everyone else
outerPlayerIter = players.iterator();
while(outerPlayerIter.hasNext()) {
Player outerPlayer = outerPlayerIter.next();
Iterator<Player> innerPlayerIter = players.iterator();
while(innerPlayerIter.hasNext()) {
Player innerPlayer = innerPlayerIter.next();
boolean isYou = false;
if(innerPlayer.equals(outerPlayer)) isYou = true;
// Send innerPlayer's info to outerPlayer
Thread.sleep(100);
dataBuffer.clearBuffer();
dataBuffer.writeByte(Msgs.mm_toclient.MES_SENDPLAYERINFO);
dataBuffer.writeBool(isYou);
dataBuffer.writeBool(innerPlayer.getIsHost());
dataBuffer.writeString(innerPlayer.getName());
dataBuffer.writeString(innerPlayer.getPublicIP().getHostAddress());
dataBuffer.writeShort((short)innerPlayer.getUdpPort());
outerPlayer.getSocket().getOutputStream().write(dataBuffer.getByteArray());
outerPlayer.getSocket().getOutputStream().flush();
}
}
但是,有时客户端似乎并未收到所有消息。我无法通过一个套接字同时发送多条消息。
临时解决此问题的一种方法是在我发送另一个数据包之前睡觉。但我不确定为什么需要这样做。
关于我如何发送/写入要发送的数据包,我是否做错了什么?什么可以修复以允许在不休眠的情况下一次正确接收多个数据包?
【问题讨论】:
标签: java tcp packet outputstream