#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);
}