【问题标题】:TCP Server/Client - How to send user input and send back the same message from the server?TCP 服务器/客户端 - 如何发送用户输入并从服务器发回相同的消息?
【发布时间】:2021-07-20 22:59:38
【问题描述】:

我希望我的客户端向服务器发送消息,服务器将收到的消息发回 但是我的客户有一个问题,因为它永远不会到达 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();
        }
    }
}

【问题讨论】:

  • 永远不会接近是什么意思
  • 我当前在客户端的代码,它接受用户输入然后将其发送到服务器,然后我调用 in.readLine() 因为我想从服务器接收消息,但正因为如此打电话我永远不会关闭 BufferederReader 或 PrintWriter 并且它还没有发送消息。我不知道原因,但是当我删除 in.readLine() 时没有问题
  • 不要破坏自己的帖子。如果您想隐藏您的问题,请将其删除。

标签: java sockets tcp


【解决方案1】:

“问题”在于服务器中的readLine()

这是想要的行为。 BufferedReader 以某种方式实现 readLine() 以便它阻塞直到它收到以下之一:'\n'、'\r'、回车后跟换行符或 EOF

客户端没有发送它们。

您可以使用println(),而不是使用print()print() 方法。

【讨论】:

    猜你喜欢
    • 2013-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-03
    • 2017-01-12
    相关资源
    最近更新 更多