http协议是基于TCP协议之上的,所以首先得用TCP连接到指定服务器上,然后发送http请求。
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <stdio.h>
#include <arpa/inet.h>
#include <pthread.h>
#include <unistd.h>
#include <string.h>
void *read_msg(void *arg);
void *read_msg(void *arg)
{
int fb = *((int *)arg);
char msg[1024];
while (1)
{
memset(msg, 0, strlen(msg));
read(fb, msg, sizeof(msg));
getchar();
printf("收到消息:%s\n", msg);
}
}
int main(int argc, char const *argv[])
{
// 创建客户端对象-------------------
int fb = socket(AF_INET, SOCK_STREAM, 0);
if (fb < 0)
{
perror("socket");
return 0;
}
struct sockaddr_in addr; // 定义结构体
addr.sin_family = AF_INET; // 设置为IPV4
addr.sin_port = htons(80); // 设置端口号为8080 htons():将本地网络字序改为网络传输统一的大端存储的字序
// ntohs() 将网络字序转化为本地主机字序
addr.sin_addr.s_addr = inet_addr("123.57.239.12"); // 设置网络IP inet_addr():将字符串转化为整型地址
//连接服务器
if (connect(fb, (struct sockaddr *)&addr, sizeof(addr))==0)
{
perror("connect");
}
//准备http请求
char *http="GET /index.html HTTP/1.1\r\nHost:123.57.239.12:80\r\n\r\n";
//发送http请求协议
write(fb,http,strlen(http));
//读取http请求回应
char buf[8192*2];
read(fb,buf,sizeof(buf));
printf("%s\n",buf);
close(fb);
}
HTTP是基于客户/服务器模式,且面向连接的。典型的HTTP事务处理有如下的过程:
(1)客户与服务器建立连接;
(2)客户向服务器提出请求;
(3)服务器接受请求,并根据请求返回相应的文件作为应答;
(4)客户与服务器关闭连接。