C++实现http服务端的流程
时间: 2023-09-12 08:05:22 浏览: 163
实现HTTP服务端的流程可以分为以下几步:
1. 创建socket并绑定端口,监听客户端请求。
2. 接收客户端的请求,解析HTTP协议。
3. 根据解析出来的请求,构建HTTP响应报文。
4. 将HTTP响应报文发送给客户端。
5. 关闭socket。
下面是一个简单的C++实现HTTP服务端的示例代码:
```c++
#include <iostream>
#include <cstring>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>
using namespace std;
const int SERVER_PORT = 8080;
const int MAX_CONN = 10;
const int BUF_SIZE = 1024;
int main() {
// 创建socket
int listen_fd = socket(AF_INET, SOCK_STREAM, 0);
if (listen_fd < 0) {
perror("socket");
exit(EXIT_FAILURE);
}
// 绑定端口
sockaddr_in addr;
memset(&addr, 0, sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = htonl(INADDR_ANY);
addr.sin_port = htons(SERVER_PORT);
if (bind(listen_fd, (sockaddr*)&addr, sizeof(addr)) < 0) {
perror("bind");
exit(EXIT_FAILURE);
}
// 监听客户端请求
if (listen(listen_fd, MAX_CONN) < 0) {
perror("listen");
exit(EXIT_FAILURE);
}
// 处理客户端请求
while (true) {
int conn_fd = accept(listen_fd, NULL, NULL);
if (conn_fd < 0) {
perror("accept");
continue;
}
char buf[BUF_SIZE];
memset(buf, 0, sizeof(buf));
// 接收客户端请求
int n = recv(conn_fd, buf, sizeof(buf), 0);
if (n < 0) {
perror("recv");
close(conn_fd);
continue;
}
// 解析HTTP协议
string request(buf);
// 构建HTTP响应报文
string response = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<h1>Hello, world!</h1>";
// 发送HTTP响应报文
n = send(conn_fd, response.c_str(), response.length(), 0);
if (n < 0) {
perror("send");
close(conn_fd);
continue;
}
// 关闭socket
close(conn_fd);
}
close(listen_fd);
return 0;
}
```
在此示例代码中,我们先创建一个socket并绑定端口,然后使用`listen`函数监听客户端请求。接着,我们通过`accept`函数接收客户端请求,并使用`recv`函数接收客户端发送的数据,解析HTTP协议后重新构建HTTP响应报文,然后使用`send`函数将响应报文发送给客户端。最后,使用`close`函数关闭socket。
阅读全文