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.