0

サーバー/クライアント チャット ルームがあります。クライアントがサーバーに接続してメッセージを送信すると、クライアント プログラムは送信したメッセージを出力しますが、サーバーに接続されている別のクライアント プログラムでは、ユーザーが「Enter」キーを押すまでメッセージを出力しません。 .

クライアント側:

try {
    //Strings to hold messages in and out:
        String userinput, serverinput;

        //Getting input from the user:
        BufferedReader input = new BufferedReader(new InputStreamReader(System.in));

        //Messages from the server will be printed to the console, messages from console will be sent to the socket:
        while(true) {
            userinput = input.readLine();
            serverout.println(username + "> " + userinput);

            serverinput = clientin.readLine();
            System.out.println(serverinput);
        }
    }

サーバー側:

public void run() {
            PrintWriter output = null;
            BufferedReader input = null;
            String message;
            SchoolRoomServer server = new SchoolRoomServer();;
            try {
                //i/o for clients:
                output = new PrintWriter(socket.getOutputStream());
                input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            } catch (IOException ioe) {
                System.err.println(ioe);
                System.exit(1);
            }

            try {
                while((message = input.readLine()) != null) {
                    server.showAll(message, output);
                }
            } catch (IOException ioe) {
                System.err.println(ioe);
                System.err.println("Damn errors.");
                System.exit(1);
            }
        }

ちなみに、server.showAll(message, output); メソッドはこれです:

public void showAll(String msg, PrintWriter printwriter) {
    for(int i = 0; i < listWriters.size(); i++) {
        if(listWriters.get(i) != printwriter) {
            listWriters.get(i).println(msg);
        }
    }
}

listWriters は PrintWriters の Arraylist であり、クライアントに対して新しいスレッドが作成されるたびに、そのクライアントに関連付けられた PrintWriter を取得します。

だから:メッセージをすぐに印刷する方法についてのアイデアはありますか?

助けてくれてありがとう。

4

2 に答える 2

0

あなたはここと同じ問題を抱えています。System.in は、ユーザーが Enter キーを押すまで何も返しません。次に、行全体を読み取ります。

于 2012-06-18T07:33:55.750 に答える
0

SocketServerSocketの読み取り

基本的に、client socketに接続するを確立する必要があります。次に、クライアントからサーバーにメッセージを出力するために、2 つserver socketの間で を渡す必要があります。i/o streams

于 2012-06-18T07:48:29.613 に答える