0

サーバーにサブスクライブするように求めるPOSTメッセージを使用してサーバーに接続しようとしています。その後、サーバーはhttp接続を開いたままにし、サブスクリプションのキャンセルまたは接続を自分で閉じるように要求するまで、ライブステータスの非同期メッセージを返送します。サーバーからのこれらの後続の応答を読み取るのに問題があります。以下のコードはサーバーに接続し、最初の応答を正常に読み取り、コンソールに出力します。問題は、その後、同じ応答(最初の応答)を無限に読み取り、画面に出力し続けることです。

誰かが私がここで台無しにしているものを見ますか?サーバーからの次の非同期メッセージを監視し、メッセージが届くまでブロックしようとしています。また、次のメッセージが非同期で表示されたときに通知を受け取るように登録する方法を誰かが知っている場合は、待機をブロックする必要がないので、さらに良いでしょう。

public void HttpSubscription() 
{
    byte[] result = new byte[10240];

    try
    {
        /* Generate the hard coded request data */
        final StringBuffer soap = new StringBuffer();
        soap.append("<s:Envelope><s:Body><SoapTest1>thing1</SoapTest1></s:Body></s:Envelope>");

        // to make HTTP Post request with HttpURLConnection
        URL url = new URL("http://192.168.1.110:80/services");
        HttpURLConnection conn = (HttpURLConnection)url.openConnection();

        // then set some properties and make a request
        conn.setRequestMethod("POST");
        conn.setRequestProperty( "Content-type", "text/xml; charset=utf-8" );

        // Get a handle to the output stream 
        OutputStream OStream = conn.getOutputStream();

        // Write the soap data to the output stream
        OStream.write(soap.toString().getBytes());

        InputStream ResponseStream = conn.getInputStream();
        while (true)
        {
            int len = ResponseStream.read(result);
            String value = new String(result);
            System.out.println(value);
        }
    }
    catch (Exception e)
    {
        System.out.println(e);
    }

    return;
}
4

2 に答える 2

3

少し古いですが、ここでいくつかの露骨な誤報を訂正することにしました。

HTTPリクエストに対する複数の応答がHTTP仕様に準拠していないという答えは間違っています!

RFC 2616から:

10ステータスコードの定義

各ステータスコードについて、以下に説明します。これには、従うことができるメソッドの説明と、応答に必要なメタ情報が含まれます。

10.1情報1xx

このクラスのステータスコードは、Status-Lineとオプションのヘッダーのみで構成される暫定応答を示し、空の行で終了します。このクラスのステータスコードに必要なヘッダーはありません。HTTP / 1.0は1xxステータスコードを定義しなかったため、サーバーは実験的な条件下を除いて、HTTP /1.0クライアントに1xx応答を送信してはなりません(MUSTNOT)。

クライアントは、100(続行)ステータスメッセージを予期しない場合でも、通常の応答の前に1つ以上の1xxステータス応答を受け入れる準備をしなければなりません。予期しない1xxステータス応答は、ユーザーエージェントによって無視される場合があります。

于 2015-05-07T09:39:42.150 に答える
1

あなたが説明したのはHTTPではなく、他の何かです。サーバーにそれを実装させることができるかもしれませんが、そうではないかもしれません。しかし、HttpURLConnectionがHTTPプロトコルに違反する何かを理解することを期待することは、少し多くのことを求めていますね。

于 2010-11-02T08:43:47.853 に答える