2012-09-27 70 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