一般我们最常使用的Web客户端就是我们的浏览器软件,现在我们来实现一个我们自己的Web客户端,对利用socket自己实现基于HTTP协议的Web服务器中的程序进行访问,当然了也可以对其他任何的Web服务器进行访问。
/
//
// 程序主要功能:使用winsock模拟一个客户端与基于HTTP协议的Web服务器进行通信。
// 这个客户端访问的站点是本机建的一个web服务器(127.0.0.1:1234).
//
///
/
#include<WinSock2.h>
#include<stdio.h>
#pragma comment(lib,"ws2_32.lib")
void main()
{
// 初始化Windows socket
WSADATA wsaData;
if ( WSAStartup( MAKEWORD( 2, 2 ) , &wsaData ) != 0 )
{
return;
}
//创建客户端套接字
SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0);
// 填充HTTP服务器的地址,以便发出正确的请求
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(827);
// 连接HTTP服务器
connect(sockClient , (SOCKADDR *)&addrSrv , sizeof(SOCKADDR));
// 构造HTTP协议的Request Header
char req[1000] = "GET /dynamic/Add?1&2 HTTP/1.1\r\n\
Host: 127.0.0.1\r\n\
User-Agent: Mozilla/5.0\r\n\
Accept: */*\r\n\
Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3\r\n\
Connection: keep-alive\r\n\r\n";//Proxy-Connection: Keep-Alive\r\nConnection: Keep-Alive\r\n
// 发送Http请求
send(sockClient,req,strlen(req)+1,0) ;
// 初始化内存
char recvBuffer[1000];
memset(recvBuffer,NULL,sizeof(recvBuffer));
// 收到HTTP服务器发来的响应
recv(sockClient,recvBuffer,1000,0);
// 输出响应的内容
printf("%s\n",recvBuffer);
// 关闭套接字
closesocket(sockClient);
// 清除数据
WSACleanup();
}这个程序发送的请求命令中的URI是这样的:
/dynamic/Add?1&2 HTTP/1.1\r\n\所以其会对我们之前实现的那个Web服务器进行访问。要百度就行访问的话,只需要这样写即可: "GET / HTTP/1.1\r\n\但是后面的Host需要修改为:www.baidu.com。版权声明:本文为bobopeng原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。