簡體   English   中英

TCP 服務器/客戶端 - 如何發送用戶輸入並從服務器發回相同的消息?

[英]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()而不是使用PrintWriterprint()方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM