如何直接打印消息?java聊天室

ewm0tg9j  于 2023-04-19  发布在  Java
关注(0)|答案(2)|浏览(148)

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

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。
那么,有没有什么想法,如何立即打印出消息?

bvhaajcl

bvhaajcl1#

你遇到了和here一样的问题。System.in不会返回任何东西,直到用户按下回车键。然后你就可以读取整行了。

bksxznpy

bksxznpy2#

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

相关问题