一.TCP机制



二.HTTP协议








cs
#ifndef _HEAD_H
#define _HEAD_H
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<arpa/inet.h>
#include<sys/socket.h>
#endif
cs
#include "head.h"
#define SER_PORT 80
#define SER_IP "219.144.82.95"
int create_tcp_connect()
{
int sockfd = socket(AF_INET,SOCK_STREAM,0);
if(sockfd < 0)
{
perror("socket errror");
return -1;
}
struct sockaddr_in seraddr;
seraddr.sin_family = AF_INET;
seraddr.sin_port = htons(SER_PORT);
seraddr.sin_addr.s_addr = inet_addr(SER_IP);
int ret = connect(sockfd,(struct sockaddr*)&seraddr,sizeof(seraddr));
if(ret < 0)
{
perror("connect error");
return -1;
}
return sockfd;
}
int send_http_request(int sockfd)
{
char *preq = "GET / HTTP/1.1\r\n"
"Host: news.sohu.com\r\n"
"User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/113.0\r\n"
"Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8\r\n"
"Accept-Language: en-US,en;q=0.5\r\n"
"Connection: close\r\n"
"\r\n";
ssize_t cnt = send(sockfd,preq,strlen(preq),0);
if(cnt < 0)
{
perror("send error");
return -1;
}
return sockfd;
}
int recv_http_response(int sockfd)
{
char buff[1024] = {0};
while(1)
{
ssize_t cnt = recv(sockfd,buff,sizeof(buff),0);
if(cnt < 0)
{
perror("recv error");
break;
}
else if(0 == cnt)
{
printf("接收结束\n");
break;
}
write(1,buff,cnt);
}
return 0;
}
int main(int argc,const char *argv[])
{
int sockfd = create_tcp_connect();
if(sockfd < 0)
{
perror("sockfd errror");
return -1;
}
send_http_request(sockfd);
recv_http_response(sockfd);
close(sockfd);
return 0;
}