Java的HttpURLConnection类如何接收来自服务器的多个响应
-
28-09-2019 - |
题
我试图用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状态响应可能是 由一个用户代理忽略。强>
不隶属于 StackOverflow