簡體   English   中英

從套接字讀取后續響應

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM