簡體   English   中英

多線程服務器不接受客戶端輸出流

[英]Multithreaded server not accepting client outputstream

我對線程世界有點陌生,我正在制作一個游戲服務器,分配連接到另一個線程的每個客戶端,以便我可以在同一端口上接受多個客戶端。 但是,客戶端連接到服務器時遇到問題,但是無法發送數據(以ObjectOutputStream的格式發送到服務器)。 關於可能出什么問題的任何指示?

這是我的MatchmakingServer.java的代碼

    try {
        listenForPlayers = new ServerSocket(portNumber);
        System.out.println("Port opened. Searching for players");
        while (true){
            Socket clientSocket = listenForPlayers.accept();
            Runnable r = new PlayerHandlerForServer(clientSocket);
            new Thread(r).start();
        }
    } catch (Exception e) { }

我的PlayerHandler對象實現Runnable,這是它的run方法。

private Player player;
private ObjectInputStream getPlayerData;
private static PrintWriter sendPlayerData;
private Socket socket;
public void run() {
    try {
        getPlayerData = new ObjectInputStream(socket.getInputStream());
        player = (Player) getPlayerData.readObject();
        //do stuff with the player object, this code get executed.
        sendPlayerData = new PrintWriter(socket.getOutputStream(),true);
        updatePlayersFound(sendPlayerData);
    } catch (Exception e) { }

}

如注釋日志中指出的那樣,這些異常將提供有關可能導致此問題的線索。

一個瘋狂的猜測是您的Player類沒有實現Serializable接口。

我想知道為什么您要從Socket讀取序列化的對象,卻使用PrintWriter寫入數據。 我建議使用ObjectOutputStream並保持一致。

發送序列化的對象可能會過大。 可能有更多的數據要發送,然后您才在乎。 這可能對您的游戲客戶端造成無用的網絡延遲! 您可能想看看使用DataInputStream / DataOutputStream。 這將允許您僅使用真正必要的對象來編寫/讀取對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM