2

したがって、私のプログラムの最終結果はゲームクライアントの更新ですが、これまでのところ、複数の接続を受け入れることができるサーバーと、サーバーに接続するクライアントがあります。これはクライアント部分のコードです:

public void client() {
    Socket socket = null;
    ObjectInputStream in = null;
    ObjectOutputStream out = null;

    try {
        socket = new Socket(IP, Integer.parseInt(port));
        in = new ObjectInputStream(socket.getInputStream());
        out = new ObjectOutputStream(socket.getOutputStream());
    } catch (Exception e) {
        e.printStackTrace();
    }
    do {
        // have a conversation
        try {
            message = (String) in.readObject();
            System.out.println("\n" + message);
        } catch (Exception e) {
            System.out.println("\n idk wtf that user sent!");
        }
    } while (!message.equals("CLIENT - END")); // When the user types "END"

    System.err.println("CLOSED!!!");
    System.exit(0);
}

これはサーバー部分のコードです。

public void run() {
    // where everything happens
    System.out.println("server- connected");
    try {
        in = new ObjectInputStream(socket.getInputStream());
        out = new ObjectOutputStream(socket.getOutputStream());

        out.writeObject("hi");
        out.flush();
        Thread.sleep(5000);
        out.writeObject("close");
        out.flush();
        System.out.println("closed");
    } catch (Exception e) {
        e.printStackTrace();
    }

}

現在、サーバーがオブジェクトを送信する"hi"と、クライアントがそれを受信して​​いないように見えるこの問題に直面しています。できるかどうかは完全にはわかりませんが、取得している場合は、希望どおりに印刷されていません。私は以前、これと同じことを行うチャット プログラムを作成しました。これをほとんどコピーしましたが、通信していません。私が得るのは、それらが接続されているという確認です。何が起こっているのかわかりませんが、助けていただければ幸いです。前もって感謝します!

4

1 に答える 1

4

ObjectInputStreams の前に ObjectOutputStreams を作成し、作成直後にそれらをフラッシュします。

ObjectInputStreamのコンストラクターは、ストリーム ヘッダーを読み取ります。このストリーム ヘッダーは、ObjectOutputStream のコンストラクターによって書き込まれます(一種の醜い実装ですが、それが何であるかです)。OIS を最初に作成すると、ヘッダー バイトを待ってハングします。

于 2012-11-22T02:40:21.800 に答える