【问题标题】:how to print out message straight away? java chat room如何立即打印出消息? java聊天室
【发布时间】:2012-06-18 07:21:19
【问题描述】:

我有一个服务器/客户端聊天室。当客户端连接到服务器并发送消息时,客户端程序会打印出它发送的消息,但在另一个连接到服务器的客户端程序上,它不会打印出,直到用户按下“输入”键.

在客户端:

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。

那么:关于如何立即打印消息的任何想法?

感谢您的帮助。

【问题讨论】:

  • 顺便说一句,我对 Java 还很陌生——我应该在哪里使用 flush() 方法来直接打印出来?

标签: java sockets arraylist serversocket chatroom


【解决方案1】:

您遇到与here 相同的问题。 System.in 在用户按下回车之前不会返回任何内容。然后你就可以阅读整行了。

【讨论】:

  • 在这种情况下,您对如何立即返回输入有任何想法吗?
【解决方案2】:

继续阅读Socket 和ServerSocket

基本上您需要建立一个连接到server socket 的client socket,然后您需要在两者之间传递i/o streams 以将消息从客户端打印到服务器,反之亦然。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-30
    • 2015-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-25
    相关资源
    最近更新 更多