Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何直接打印信息?java聊天室_Java_Sockets_Arraylist_Serversocket_Chatroom - Fatal编程技术网

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

如何直接打印信息?java聊天室,java,sockets,arraylist,serversocket,chatroom,Java,Sockets,Arraylist,Serversocket,Chatroom,我有一个服务器/客户端聊天室。当客户机连接到服务器并发送消息时,客户机程序会打印出它发送的消息,但在连接到服务器的另一个客户机程序上,它不会打印出来,直到用户按下“enter”键 在客户端: try { //Strings to hold messages in and out: String userinput, serverinput; //Getting input from the user: BufferedReader inp

我有一个服务器/客户端聊天室。当客户机连接到服务器并发送消息时,客户机程序会打印出它发送的消息,但在连接到服务器的另一个客户机程序上,它不会打印出来,直到用户按下“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(消息、输出);方法如下:

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);
        }
    }
}
public void showAll(字符串msg,PrintWriter PrintWriter){
对于(int i=0;i
ListWriter是PrintWriter的Arraylist,每次为客户机创建新线程时,它都会获取与该客户机关联的PrintWriter

那么:关于如何立即打印消息有什么想法吗


谢谢您的帮助。

您遇到的问题与。在用户按下enter键之前,System.in不会返回任何内容。然后你可以阅读整行内容。

继续阅读&


基本上,您需要建立一个
客户机套接字
,它连接到
服务器套接字
,然后您需要在两者之间传递
i/o流
,以便将消息从客户机打印到服务器,反之亦然。

顺便说一句,我对Java非常陌生-在哪里使用flush()方法直接打印出来?在这种情况下,你对我如何直接返回输入有什么想法吗?