【问题标题】:Read server response using Java Sockets API使用 Java Sockets API 读取服务器响应
【发布时间】:2016-09-25 18:34:46
【问题描述】:

我创建了一个简单的类,它将一个字符串发送到服务器,两者都使用 Java 套接字 API 进行通信。服务器读取客户端发送的内容,并以另一个字符串响应。但客户端无法读取该响应。

这是客户端类:

import java.io.IOException;
import java.net.Socket;

public class Client {

    public static void main(String[] args) throws IOException {
        Socket socket = new Socket("localhost", 8181);
        socket.getOutputStream().write("Hello".getBytes());

        int read;
        while ((read = socket.getInputStream().read()) > -1) {
            System.out.print((char) read);
        }

        socket.close();
    }

}

这是服务器类:

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {

    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket = new ServerSocket(8181);

        while (true) {
            Socket socket = serverSocket.accept();
            int read;
            while ((read = socket.getInputStream().read()) > -1) {
                System.out.print((char) read);
            }

            socket.getOutputStream().write("Hi!".getBytes());
        }

    }

}

我想问题可能出在客户端执行流程中,因为我不知道如何等待服务器响应。换句话说,如何实现一个能够读取服务器响应的客户端?

【问题讨论】:

    标签: java sockets


    【解决方案1】:
    1. 您没有关闭套接字。
    2. 服务器正在尝试读取直到流结束,然后发送回复。流结束仅在对等方关闭连接时发生,因此即使在您修复 (1) 之后也无法发送回复。您需要阅读一条消息,无论它在您的应用程序协议中意味着什么。

    【讨论】:

    • 没错,因为while ((read = socket.getInputStream().read()) > -1),服务器会一直等到客户端关闭连接。
    【解决方案2】:

    您需要刷新或关闭输出流。

    【讨论】:

      猜你喜欢
      • 2016-07-20
      • 2011-08-26
      • 1970-01-01
      • 1970-01-01
      • 2011-08-15
      • 2012-03-01
      • 2012-03-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多