我试图用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,这是别的东西。你也许可以让你的服务器来实现它,你可能不会。但预计HttpURLConnection的明白了什么违反HTTP协议是要求有点多,你不觉得吗?

其他提示

有点老了,但我决定在这里纠正一些明目张胆的误传。

,说明多个响应于HTTP请求的答案不根据HTTP规范是错误!

RFC 2616

  

10个状态代码定义

     

每个状态代码描述如下,包括该方法(一个或多个)的描述中,可以按照与在所述响应要求的任何的元信息。

     

10.1信息性的1xx

     

此类的状态码表示临时的响应,由   只的状态行和可选的头,并且由终止   空行。有此类的地位无需头   码。由于HTTP / 1.0没有定义任何1xx的状态代码,服务器必须   不发送的1xx响应HTTP / 1.0客户端除了下   实验条件。

     

:一种客户端必须准备接受一个或多个1xx状态响应   之前的常规反应,即使客户不希望100   (续)状态消息。意外的1xx状态响应可能是   由一个用户代理忽略。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top