繁体   English   中英

Java 服务器 - 发送数据包不正确?

[英]Java Server - Sending packets out incorrectly?

目前有一个 TCP 服务器内置在 Java 中,我正在使用其套接字的 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();
    }
   
}

但是,有时客户端似乎并未收到所有消息。 我不能通过一个套接字同时发送多条消息。

暂时解决此问题的一种方法是在我发送另一个数据包之前睡觉。 但我不确定为什么需要这样做。

关于我如何发送/写入要发送的数据包,我做错了什么吗? 什么可以修复以允许在不休眠的情况下一次正确接收多个数据包?

这可能是由于客户端在通信实际完成之前关闭套接字的速度太快了。 您能否尝试提高 thread.sleep 值,或者在客户端,如果您使用任何时间,也尝试提高那个值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM