嵌入式第三十七天(TCP补充,应用层协议(HTTP))
一.TCP机制
二.HTTP协议
1.
2.
3.
4.
5.
6.
7.
8.
#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
#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;
}