[英]TCP Server/Client - How to send user input and send back the same message from the server?
我希望我的客戶端向服務器發送一條消息,服務器將收到的消息發回,但我的客戶端存在問題,因為它永遠不會到達 close() 語句,因為 readLine() 因此它只是掛在那里,我能做什么怎么做才能讓它工作?
服務器:
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'、回車后跟換行符或 EOF
客戶端沒有發送它們。
您可以使用println()
而不是使用PrintWriter
的print()
方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.