繁体   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