簡體   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