簡體   English   中英

Java HttpURLConnection如何從服務器接收多個響應

[英]Java HttpURLConnection how to receive multiple responses from server

我試圖通過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;
}

有點老了,但是我決定在這里糾正一些公然的錯誤信息。

指出針對HTTP請求的多個響應不符合HTTP規范的答案是錯誤的!

RFC 2616

10狀態碼定義

每個狀態代碼的說明如下,包括對它可以采用的方法的說明以及響應中所需的任何元信息。

10.1信息性1xx

此類狀態碼表示僅由狀態行和可選標頭組成的臨時響應,並以空行終止。 此類狀態碼沒有必需的標題。 由於HTTP / 1.0沒有定義任何1xx狀態代碼,因此服務器必須禁止在實驗條件下向HTTP / 1.0客戶端發送1xx響應。

即使客戶端不希望收到100(繼續)狀態消息,客戶端也必須准備在接受常規響應之前接受一個或多個1xx狀態響應。 用戶代理可能會忽略意外的1xx狀態響應。

您所描述的不是HTTP,而是其他東西。 您也許能夠使服務器實現它,但可能沒有。 但是,期望HttpURLConnection理解一些違反HTTP協議的內容會產生很多問題,您不覺得嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM