代码之家  ›  专栏  ›  技术社区  ›  user9053681

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

  •  0
  • user9053681  · 技术社区  · 7 年前

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

    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 回复  |  直到 7 年前
        1
  •  0
  •   awiles    7 年前

    你是在读书吗。readLine()while循环?也许您永远不会得到输入字符的结尾,也永远不会终止。此外,您将在while循环结束时关闭读写,然后期望它们在下一次迭代中打开。将这些语句和close语句移动到与套接字相同的层。 这样,每次您发送内容时,您的客户机都希望服务器做出响应。如果不希望它们相互依赖,我建议在while(true)循环中将接收逻辑移动到它自己的线程。