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 に答える