【问题标题】:Java Socket: Why client don't reply serverJava Socket:为什么客户端不回复服务器
【发布时间】:2014-04-20 08:14:33
【问题描述】:

我想编写一个客户端-服务器程序,在该程序中服务器和客户端相互发送消息。首先,我的服务器向客户端发送消息,然后客户端回复。接下来,我的服务器发送另一条消息,客户端回复。问题是,在服务器引发的第一条消息上,客户端没有响应。 我的服务器:

public class Server {
public void go() {
    try {
        ServerSocket serverSocket = new ServerSocket(9999);
        System.out.println("Server listening ...");
        Socket socket = serverSocket.accept();
        try (
            PrintWriter printWriter = new PrintWriter(socket.getOutputStream());
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        ) {
            String input;
            printWriter.println(new Scanner(System.in).nextLine());
            while ((input = bufferedReader.readLine()) != null) {
                System.out.println(input);
                printWriter.println(new Scanner(System.in).nextLine());
                if(input == "Bye") break;
            }
        }


    } catch (IOException ioException) {
        ioException.printStackTrace();
    }
}

public static void main(String[] args) {
    Server server = new Server();
    server.go();
}

}

我的客户:

public class Client {

public void go() {
    try {
        try (
            Socket socket = new Socket("localhost", 9999);
            PrintWriter printWriter = new PrintWriter(socket.getOutputStream());
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        ) {
            String input;
            while ((input = bufferedReader.readLine()) != null) {
                System.out.println("1");
                System.out.println(input);
                printWriter.println(new Scanner(System.in).nextLine());
            }
        }
    } catch (UnknownHostException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

public static void main(String[] args) {
    Client client = new Client();
    client.go();
}

}

我的代码有问题吗?

【问题讨论】:

  • 方法ServerSocket#accept() 侦听到此套接字的连接并接受它。该方法一直阻塞,直到建立连接。

标签: java sockets connection client


【解决方案1】:

您的客户端连接然后阻止从服务器读取一行。

您的服务器接受连接,然后阻止从客户端读取一行。

我不知道你期待接下来会发生什么,但它不会。有人需要发送一些东西。

【讨论】:

  • 我是服务器-客户端编程的新手,你所说的“块读取一行”是什么意思,我只想让我的客户端回复服务器,我的服务器向客户端发送消息
  • 回复什么?每个人都在接收,没有人发送任何东西来接收。
  • 别人怎么能寄东西给别人?
  • 你用 write() 方法发送。
【解决方案2】:

您的代码似乎没问题。你只需要在写完之后调用flush()来推送基础设施:

printWriter.flush(); 

【讨论】:

    猜你喜欢
    • 2013-10-29
    • 1970-01-01
    • 2018-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-06
    • 1970-01-01
    相关资源
    最近更新 更多