我正在尝试从服务器读取字节到字符,而不是由我维护的。这是客户。我的问题是没有从发送到服务器的请求中获得所需的响应。根据我的理解,为了检测消息的结束,有三种常见的方式:
*关闭邮件末尾的连接。
*将消息的长度放在数据本身之前
*使用分隔符;一些在正常数据中永远不会出现的值
这就是我到目前为止所做的。使用套接字来实现对服务器的写入:
Socket outgoing = new Socket(Host, Port);
String request = "GET http://www.firtRequest.com/ HTTP/1.1\r\nHost: www.firstRequest.com\r\n\r\n" + "GET http://www.secondRequest.com/ HTTP/1.1\r\nHost: www.secondRequest.com\r\n\r\n";
outgoing.getOutputStream().write(request.getBytes());
outgoing.getOutputStream().flush();
使用getInputStream()
从套接字服务器读取,我应该收到两个响应,但第二个响应带有一个html标签,据我所知,这不是共鸣的一部分,所以我猜不到读到结束发送到服务器的第一个请求的流或者没有正确读取响应。
输出1:
HTTP/1.1 200 OK
Date: mon,24 Aug 2015 09:02:30 GMT
Content-Type: application/json
Content-Length: 42
输出2:
<!DOCTYPE html PUBLIC "-//W3C"
....
<head>
....
</head>
<body>
...
</body>
HTTP/1.1 200 OK
这是我的读取方法,其中尝试使用响应中的"\r\n\r\n"
标记或当流命中-1时检测流的结尾。
public static String ReadStream(InputStream inputStream) throws IOException {
StringBuilder builder = new StringBuilder();
while (true) {
int rdL = inputStream.read();
if (rdL == -1) {
break;
}
// Convert the bytes read into characters
builder.append((char) rdL);
if (builder.indexOf("\r\n\r\n") != -1) {
// EOS detected
break;
}
}
return builder.toString();
}
指向获取该html标签的错误指针?感谢
答案 0 :(得分:0)
有三种常见方式:
HTTP只有一种“通用方式”,那就是正确实现RFC 2616。你这里没有做过任何尝试。仔细看看。但是,当HttpURLConnection
已经存在时,没有充分的理由尝试自己实现HTTP,更不用说大量的第三方HTTP API了。