#include <stdio.h> #include <string.h> #include <winsock2.h> #pragma comment(lib,"WS2_32.lib") #define KBYTES 1024 struct sockaddr_in server; struct hostent *hostinfo; WSADATA wsaData; WORD wVersionRequested; SOCKET LocalSock; char IpAddr[16]; char buff[100*KBYTES]; FILE *pMyDownFile=NULL; int nWriteBytes=0; int FindEntityMsgPos=0; int MsgInfoSize=0; char *pHostName="www.xxx.com"; int main(int argc,char *argv[]) { memset(IpAddr,0,sizeof(IpAddr)); memset(buff,0,sizeof(buff)); char *pRequestHeader="GET /xxx.exe HTTP/1.1\r\n" "Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, application/x-silverlight, application/vnd.ms-excel\r\n" "Accept-Language: zh-cn\r\n" "UA-CPU: x86\r\n" "Accept-Encoding: gzip, deflate\r\n" "User-Agent: Mozilla/12.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)\r\n" "Host:www.xxxx.com\r\n" "Connection: Keep-Alive\r\n\r\n"; wVersionRequested = MAKEWORD( 2, 2 ); if (WSAStartup(wVersionRequested , &wsaData)) { printf("Winsock Initialization failed.\n"); exit(1); } if ((LocalSock=socket(AF_INET,SOCK_STREAM,0))==INVALID_SOCKET) { printf("Can not create socket.\n"); exit(1); } if ((hostinfo=gethostbyname(pHostName))!=NULL) { memcpy(IpAddr,inet_ntoa(*(struct in_addr *)*hostinfo-> h_addr_list),sizeof(IpAddr)); } else { WSACleanup(); exit(1); } server.sin_family = AF_INET; server.sin_port = htons(80); server.sin_addr.s_addr= inet_addr(IpAddr); if (connect(LocalSock,(struct sockaddr*)&server,sizeof(server))==0) { int nSendedByte=send(LocalSock,pRequestHeader,strlen(pRequestHeader),0); printf("the sended data's length:%d bytes\n\n",nSendedByte); printf("RequestHeader1 :\n%s\n",pRequestHeader); int nRecvBytes=recv(LocalSock,buff,sizeof(buff),0); printf("the recieved data's length is :%d bytes\n\n",nRecvBytes); printf("ResponseHeader1 :\n%s\n",buff); int i=0; while(true) { if ((buff[i]=='\r')&&(buff[i+1]=='\n')&&(buff[i+2]=='\r')&&(buff[i+3]=='\n')) { FindEntityMsgPos=i+4; break; } i++; } if(pMyDownFile=fopen("C:\\download.html","w+")) { printf("openfile success\n"); while(FindEntityMsgPos!=nRecvBytes) { fputc(buff[FindEntityMsgPos++],pMyDownFile); MsgInfoSize++; } printf("file download success\n"); printf("total size %d bytes \n",nRecvBytes); printf("response header size:%d bytes\n",nRecvBytes-MsgInfoSize); printf("request header size :%d bytes\n",MsgInfoSize); } else printf("open file fail\n"); exit(1); } fclose(pMyDownFile); closesocket(LocalSock); WSACleanup(); getchar(); return(1); }