首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

初学者第一次写http get,为什么recv一直是0

2012-04-14 
菜鸟第一次写http get,为什么recv一直是0#include iostream#include string#include Windows.h#incl

菜鸟第一次写http get,为什么recv一直是0
#include <iostream>
#include <string>
#include <Windows.h>
#include <WinSock.h>
#pragma comment(lib, "WS2_32.lib")

using namespace std;

int main()
{
char sendbuf[]="GET / HTTP/1.1/r/nHost:www.baidu.com/r/nUser-Agent: Mozilla/5.0 (Windows NT 5.1; rv:10.0.2) Gecko/20100101 Firefox/10.0.2/r/nAccept-Language: zh-cn,zh;q=0.5/r/nAccept-Encoding: gzip, deflate/r/nConnection:Keep-Alive/r/n/r/n";
char rMsg[1000000];

WSADATA wsaData;
WORD sockVersion = MAKEWORD(2,0);
::WSAStartup(sockVersion, &wsaData );

SOCKET s = ::socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

hostent * pHostent;  
pHostent=gethostbyname("www.baidu.com");
in_addr addr;
memcpy(&addr,pHostent->h_addr_list[0],sizeof(in_addr));
cout << "blog.sina.com.cn IP : " <<inet_ntoa(addr)<<endl;

sockaddr_in sin;
sin.sin_family = AF_INET;
sin.sin_port = htons(80);
sin.sin_addr = addr;

::connect( s, LPSOCKADDR(&sin),sizeof(sin) );
::send(s,sendbuf,strlen(sendbuf),0);
int len = ::recv(s,rMsg,820000,0);
if (len != 0)
{
rMsg[len] = '\0';
cout << "抓取成功!!!" << endl;
}
else
{
cout << "抓取失败!!!" << endl;
}

SECURITY_ATTRIBUTES sa;
sa.nLength = sizeof(sa);
sa.lpSecurityDescriptor = NULL;
sa.bInheritHandle = true;
HANDLE hFile = ::CreateFile("aaa.html",GENERIC_WRITE,FILE_SHARE_WRITE,&sa,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
DWORD dw;
WriteFile(hFile,rMsg,strlen(rMsg),&dw,NULL);

::closesocket(s);
::WSACleanup();
return 0;
}


[解决办法]
::connect( s, LPSOCKADDR(&sin),sizeof(SOCKADDR) );
查下连接发送这些是不是失败 如果失败得到返回值 看看。。。你使用rMsg太大了。
用过2048足够了。。得到数据以后 还需要解析回应头

热点排行