[英]Reading subsequent response from a socket
我正在嘗試從不由我維護的服務器中將字節讀取為字符。 這是客戶。 我的問題是無法從發送到服務器的請求中獲得所需的響應。 根據我的理解,檢測消息的結尾有三種常見方法:
*在消息末尾關閉連接。
*將消息的長度放在數據本身之前
*使用分隔符; 一些在正常數據中永遠不會出現的值
所以這是我到目前為止所做的事情。我使用套接字來實現向服務器的寫入,如下所示:
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標記在做什么錯的指針? 謝謝
共有三種常見方法:
HTTP只有一種“通用方式”,那就是正確實現RFC 2616。 您在這里沒有做任何嘗試。 查一下 但是沒有充分的理由嘗試在HttpURLConnection
已經存在時自己實現HTTP,更不用說眾多第三方HTTP API了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.