TCP Server/Client - 如何发送用户输入并从服务器发回相同的消息?

TCP Server/Client - How to send user input and send back the same message from the server?

我希望我的客户端向服务器发送一条消息,然后服务器将收到的消息发回 但是我的客户有一个问题,因为它永远不会因为 readLine() 而到达 close() 语句 因此它只是挂在那里,我该怎么做才能让它工作?

服务器:

import java.net.*;
import java.io.*;
public class Server{
    public static void main(String[] args){
        try{
            ServerSocket server=new ServerSocket(3535);
            while(true){
                Socket socket=server.accept();
                BufferedReader in =new BufferedReader(new InputStreamReader(socket.getInputStream()));
                PrintWriter out=new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));
        
                String message=in.readLine();
                System.out.println(message);

                out.print(message);
                out.flush();
                
                in.close();
                out.close();
                socket.close();
            } }
        catch(Exception e){
            System.out.println(e);
            e.printStackTrace();
        }
    }
}

客户:

import java.net.*;
import java.io.*;
public class Client{
    public static void main(String[] args){
        try{
            BufferedReader user_in =new BufferedReader(new InputStreamReader(System.in));
            while(true){
                Socket socket=new Socket("localhost",3535);
                BufferedReader in=new BufferedReader(new InputStreamReader(socket.getInputStream()));
                PrintWriter out=new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));
                
                out.print(user_in.readLine());
                out.flush();    

                String message_from_server = in.readLine();
                System.out.println("Message from server : " + message_from_server);

                out.close();
                in.close();
                socket.close();
            }
          
        }
        catch(Exception e){
            System.out.println(e);
            e.printStackTrace();
        }
    }
}

“问题”出在服务器readLine()

这是通缉行为。 BufferedReader 以某种方式实现 readLine(),这样它就会阻塞,直到它收到以下之一:'\n'、'\r'、回车符 return 后跟换行符或 EOF

客户没有发送它们。

您可以使用 println().

而不是使用 PrintWriterprint() 方法