如何允许服务器上的客户端发送多条消息? JAVA

时间:2018-03-07 21:11:35

标签: java loops server client chat

我一直在创建一个聊天室,多个客户端可以在同一台服务器上连接和通话。 我遇到的唯一问题是让每个客户端发送多条消息。我一直在尝试不同的循环方法,但我遇到了一些问题。 任何帮助将不胜感激:)谢谢。 这里的代码:

public class Client {

public static void main(String[] args){

    Scanner clientInput = new Scanner(System.in);

    try {
        Socket SOCK = new Socket("localhost", 14001);
        System.out.println("Client started!");

        //Streams
        while(true){
        OutputStream OUT = SOCK.getOutputStream(); //writing data to a destination
        PrintWriter WRITE = new PrintWriter(OUT); // PrintWriter prints formatted representations of objects to a text-output stream

        InputStream in = SOCK.getInputStream(); //reads data from a source
        BufferedReader READ = new BufferedReader(new InputStreamReader(in));
        //---------------------------------
        System.out.print("My input: ");
        String atServer =  clientInput.nextLine();

        WRITE.write(atServer + "\n");
        WRITE.flush();  //flushes the stream

        String stream = null;

        while((stream = READ.readLine()) != null){  //if stream is not empty
            System.out.println("Client said: " + stream);
        }

        READ.close();
        WRITE.close();
        }

    } catch (UnknownHostException e){
        e.printStackTrace();
    }
    catch (IOException e) {
        e.printStackTrace();
    }
}
}

我尝试过使用while循环不断询问输入但似乎没有工作。

1 个答案:

答案 0 :(得分:0)

你是在循环中使用READ.readLine()吗?也许你永远不会得到输入字符的结束,而且永远不会终止。此外,您在while循环结束时关闭READ和WRITE,然后期望它们在下一次迭代时打开。将那些和close语句移动到与Socket相同的层。 有了这个,每次发送一些东西,你的客户都期望从服务器响应一些东西。如果你不希望它们彼此依赖,我建议在一个while(true)循环中将接收逻辑移动到它自己的线程。