#include <winsock2.h>
#include <fstream>
#pragma comment(lib, "ws2_32.lib ")
using namespace std;
void main()
{
///初始化Socket函数库
WSADATA wsaData;
if( WSAStartup(MAKEWORD(2,0), &wsaData)
|| LOBYTE(wsaData.wVersion) != 2 )
return;
struct protoent *ppe;
ppe=getprotobyname("tcp");
///创建SOCKET对象
SOCKET sock = socket(PF_INET, SOCK_STREAM, ppe->p_proto);
if(sock == INVALID_SOCKET)
return;
///根据主机名获得IP地址
hostent* pHostEnt=gethostbyname("www.hjsm.net ");
if(pHostEnt==NULL)
return;
int nTime = 10000;
setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO, (char*)&nTime, sizeof(nTime));
setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, (char*)&nTime, sizeof(nTime));
///连接
struct in_addr ip_addr;
memcpy(&ip_addr, pHostEnt->h_addr_list[0], 4);///h_addr_list[0]里4个字节,每个字节8位
struct sockaddr_in destaddr;
memset((void *)&destaddr, 0, sizeof(destaddr));
destaddr.sin_family = AF_INET;
destaddr.sin_port = htons(80);
destaddr.sin_addr = ip_addr;
if( 0 != connect(sock, (struct sockaddr*)&destaddr, sizeof(destaddr)) )
return;
///格式化请求
char request[] =
"GET / HTTP/1.1\r\n"
// "GET /book/2132/zip/gb.zip HTTP/1.1\r\n"
// "Host:read.hjsm.net\r\n"
"Host:www.hjsm.net\r\n"
"Accept:*/*\r\n"
// "Referer: http://curl.haxx.se/download.html\r\n "
"User-Agent:Mozilla/4.0 (compatible; MSIE 5.00; Windows 98)\r\n"
// "Range: bytes=0-\r\n"
"Pragma: no-cache\r\n"
"Cache-Control: no-cache\r\n"
"Connection:Close\r\n\r\n";
// "Connection:Keep-Alive\r\n\r\n";
///发送请求
if( SOCKET_ERROR == send(sock, request, strlen(request), 0) )
return;
//---------Response----------
// HTTP/1.1 200 OK
// Date: Wed, 02 Feb 2005 08:42:09 GMT
// Server: Apache
// Last-Modified: Mon, 24 Jan 2005 13:17:07 GMT
// ETag: "37a9ef-7635b-459bac0"
// Accept-Ranges: bytes
// Content-Length: 484187
// Connection: close
// Content-Type: application/zip
// Transfer-Encoding: chunked - 当有该行存在时,content会是分块传送,每块有一个头,格式:"[16进制块大小,string]\r\n"
int rcv_bytes = 0;
char buf[2049] = {0,};
ofstream ofs("c:\\1.dat", ios::binary|ios::out|ios::trunc);
while(1)
{
rcv_bytes = recv(sock, buf, 2048, 0);
if( rcv_bytes <= 0 )
break;
ofs.write(buf, rcv_bytes);
break;
}
ofs.close();
closesocket(sock);
WSACleanup();
}
c++下载网页的代码,VC6.0编译通过
最新推荐文章于 2022-12-13 13:42:21 发布