我正在使用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.
答案 0 :(得分:3)
糟糕!我们服务器端的错误是执行readLine而不是字符读取。由于没有CRLF,它会挂起。