Android HTTPUrlConnection POST

时间:2012-05-25 18:41:46

标签: android post httpurlconnection

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

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

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

我已阅读了大量示例,并尝试了各种更改,以确定是否可以以任何方式影响这一切,但效果不尽如人意。例如,关闭保持alives,强制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. 

1 个答案:

答案 0 :(得分:3)

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