Java套接字客户端:耐心等待响应

时间:2014-08-22 13:25:22

标签: java sockets

我在quickserver.org的帮助下通过套接字创建了一个服务器。服务器运行稳定。

现在我必须编写一个向服务器发送请求(只是一个字符串值)的客户端来获取指令并等待其响应(xml为字符串)。当服务器上的请求触发的进程不是非常耗时时,这很好。不幸的是,客户端连接中断了服务器需要很长时间才能完成进程,导致连接中断并且客户端无法获得任何回复。

以下是客户端代码:

public String sendAndReceive(String message) throws IOException {
    PrintWriter printWriter = new PrintWriter(new OutputStreamWriter(this.socket.getOutputStream()));
    BufferedReader reader = new BufferedReader(new InputStreamReader(this.socket.getInputStream()));
    printWriter.print(message);
    printWriter.flush();
    this.socket.shutdownOutput();
    String line = null;
    StringBuilder xmlResponse = new StringBuilder();
    while ((line = reader.readLine()) != null)
    {
        xmlResponse.append(line);
    }
    printWriter.close();
    reader.close();
    this.socket.close();
    return xmlResponse.toString();
  } 

此方法发送请求并在之后等待响应。我不确定while循环,但我在网上找到的所有例子都赞美这种结构。在我的观点上,reader.readline()可以为null,因为服务器需要更多时间来响应,因此方法结束而不会得到响应。

套接字客户端耐心等待响应的最佳做法是什么?我做错了什么?

亲切的问候, Hilderich

1 个答案:

答案 0 :(得分:0)

你可能会超时。 您可以使用Socket.setSoTimeout(int timeout)来更改超时(以毫秒为单位)。