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()
.
而不是使用 PrintWriter
的 print()
方法
我希望我的客户端向服务器发送一条消息,然后服务器将收到的消息发回 但是我的客户有一个问题,因为它永远不会因为 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()
.
PrintWriter
的 print()
方法