VC实现简单Http连接
一、引言WindowsSocketAPI是一套开放的、支持多种协议的Windows下的网络编程接口,它包括一个标准的BerkeleySocket功能调用的集合,以及为Windows所作的重要扩充。WindowsSocket经过不断完善并在众多公司的全力支持下,已成为Windows网络编程的事实上的标...
一、引言
----WindowsSocketAPI是一套开放的、支持多种协议的Windows下的网络编程接口,它包括一个标准的BerkeleySocket功能调用的集合,以及为Windows所作的重要扩充。WindowsSocket经过不断完善并在众多公司的全力支持下,已成为Windows网络编程的事实上的标准。
----本文将在VC 5.0环境下介绍一个基于Winsock的HTTP客户应用程序。读者可以基于本例同样的原理实现其他Internet常用协议(time,SMTP,POP3,Telnet,FTP等)的客户应用程序。
二、一个简单的浏览器
----我将创建一个简单的浏览器,以说明如何通过Winsock基于HTTP协议实现HTTP客户应用程序。
----首先我将创建一个帮助函数LogFile(),该函数把传递给它的字符串写到磁盘文件中。然后再创建本示例的核心函数--HttpClient()。在这个核心函数中,我将通过Winsock连接到HTTP服务器上(本例中我将使用计算机世界日报168.160.224.185)。当连接成功后,发送Get命令到HTTP服务器去下载指定路径上(/99/tips/)的文件。通过帮助函数LogFile()把下载的数据记录到本地磁盘文件中。
charfname[MAXPATH];
voidLogFile(char*p)
{
FILE*fp=fopen(fname,"a ");
fprintf(fp,"s",p);
fclose(fp);
}
BOOLHttpClient(void)
{
WSADATAws;
SOCKETs;
structsockaddr_inaddr;
intiResult;
longlResult;
charstrSubAddr[100],strBuffer[100];
lResult=WSAStartup(0x0101,&ws);
s=socket(AF_INET,SOCK_STREAM,0);
addr.sin_family=AF_INET;
addr.sin_port=htons(80);
addr.sin_addr.s_addr=inet_addr
("168.160.224.185");//计算机世界日报
iResult=connect(s,(structsockaddr*)
&addr,sizeof(addr));
if(SOCKET_ERROR==iResult)
{
//连接失败
WSACleanup();
returnFALSE;
}
else{
//连接成功
strcpy(strSubAddr,"GET/99/tips/");
strcpy(fname,"index.htm");
iResult=send(s,strSubAddr,strlen(strSubAddr),0);
//下载文件
do{
strset(strBuffer,'');
iResult=recv(s,strBuffer,sizeof(strBuffer),0);
LogFile(strBuffer);
}while(iResult!=0);
}
WSACleanup();
returnTRUE;
}
三、测试
----打开VisualC 5.0,用MFC创建基于对话框的工程Test,并在对话框上放置"Test"按钮,然后添加测试代码。
VoidCTestDlg::OnTest()
{
HttpClient();
}
----编译并运行该测试程序,在测试对话框中,单击"Test"按钮,