2012-09-27 102 views
0

你好,我有一些問題與套接字。我試圖獲得網頁源,我得到了我需要的一切,但在響應頭和頁面源之間我得到了一些額外的符號,所以我的問題是爲什麼我得到那些額外的符號。獲取網站源代碼,獲取額外的符號,winsock

我收到 「18ad」 從某處...

來源從網站得到的:

<..> 
Server: Apache-Cloud 
Transfer-Encoding: chunked 
Date: Thu, 27 Sep 2012 14:46:43 GMT 
Connection: close 
X-Cache: M 


18ad 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
    "http://www.w3.org/TR/xh 
<..> 

十六進制查看:

char: X-Cache: M......18ad...<!DO 
    hex : 58 2D 43 61 63 68 65 3A 20 4D 0D 0D 0A 0D 0D 0A 31 38 61 64 0D 0D 0A 3C 21 44 4F 

請求頭:

$GET/HTTP/1.1\r\n 
Host: www.demotivation.us\r\n 
Connection: close\r\n\r\n 

我的代碼:

char*  ip = "www.demotivation.us"; 
char*  url = "92.61.41.215"; 

<..> 
sockAddr.sin_family = AF_INET; 
sockAddr.sin_addr.s_addr = inet_addr(ip); 
sockAddr.sin_port = htons(80); 
<..> 
s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); 
connect(s, (SOCKADDR*)&sockAddr, sizeof(SOCKADDR_IN); 

<..> 

// receive source to temporary buffer 
do 
{ 
    bytes = recv(s, buffer, BUFFER_SIZE, 0); 
    buffer[bytes] = '\0'; 

    cout << buffer; 
} while(bytes > 0); 

回答

1

18ad分塊編碼方案的一部分。這意味着內容正在被下載到幾個大塊而不是一個。 18ad表示下一個塊的大小(在這種情況下爲6317字節)。

查看chunked transfer encoding的描述。

請注意,recv()可能會返回-1失敗,應在使用它作爲數組索引之前檢查失敗。

+0

感謝您的快速響應,問題很快就會解決,是的,我使用recv/send檢查,只是想簡化它 – alviduxxx