3

我正在使用 HttpURLConnection 通过 POST 将数据发送到服务器。我设置标题然后获取输出流并写入 5 个字节的数据(“M = 005”)然后关闭输出流。

在服务器上,我收到所有标题,正确的内容长度,但随后我得到一个零长度行,服务器挂在 readLine 上。

似乎发生的是客户端关闭实际上从未发生过,因此没有写入整个数据,因此服务器永远不会得到它。

我已经阅读了许多示例并尝试了各种更改,以查看我是否可以以任何方式实现这一点,但结果都不尽如人意。例如关闭保持活动,在我的数据结束时强制执行 CRLF(这会强制我的数据在服务器上输出,但连接仍然没有关闭。(这只是为了测试),尝试打印作家。

由于许多示例都在做我正在做的事情,因此我认为这很简单,我忽略了它,但我看不到它。任何帮助,将不胜感激。

    StringBuilder postDataBuilder.append("M=").append(URLEncoder.encode("005", UTF8));
    byte[] postData = null;
    postData = postDataBuilder.toString().getBytes();


    url = new URL("http://" + serverAddress + ":" + String.valueOf(serverPort));
    conn = (HttpURLConnection) url.openConnection();

    conn.setDoOutput(true);
    conn.setRequestMethod("POST");
    conn.setRequestProperty("Content-Length", Integer.toString(postData.length));
    conn.setUseCaches(false);

    OutputStream out = conn.getOutputStream();
    out.write(postData);
    out.close();

    int responseCode = conn.getResponseCode();

    // After executing the above line the server starts to successfully readLines
    // until it gets to the post data when the server hangs.  If I restart the
    // client side then the data finally gets through but the connection on the
    // server side never ends. 
4

1 回答 1

3

哎呀。我们服务器端的错误是执行 readLine 而不是字符读取。由于没有 CRLF,它会挂起。

于 2012-05-25T21:01:51.487 回答