1

私はスレッドの世界に少し慣れていません。同じポートで複数のクライアントを受け入れることができるように、別のスレッドに接続するすべてのクライアントを割り当てるゲームサーバーを作成しています。ただし、サーバーに接続しているクライアントに問題がありますが、データを(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) { }

}
4

2 に答える 2

0

シリアル化されたオブジェクトを Socket から読み取っているのに、PrintWriter を使用してデータを書き出す理由が不思議です。ObjectOutputStream を使用して一貫性を保つことをお勧めします。

シリアル化されたオブジェクトを送信するのはやり過ぎかもしれません。気にするよりも多くのデータが送信される可能性があります。これにより、ゲーム クライアントに無駄なネットワーク ラグが発生する可能性があります。DataInputStream / DataOutputStream の使用を検討することをお勧めします。これにより、本当に必要なものだけを使用してオブジェクトを読み書きできるようになります。

于 2012-10-20T05:25:29.150 に答える