C语言post实现动态服务
时间: 2023-05-25 12:06:04 浏览: 192
C语言中post方法的实现涉及到网络编程和多线程编程。以下是一个简单的实现示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <pthread.h>
#define MAX_CLIENTS 10
#define MAX_MSG_LEN 1024
int clients[MAX_CLIENTS];
int client_count = 0;
pthread_mutex_t client_mutex;
void handle_request(int client_sock, char* message) {
// 在此处实现post方法的具体逻辑
// 可以参考以下代码模板:
// 解析请求内容
char* data = strstr(message, "\r\n\r\n");
if (data == NULL) {
fprintf(stderr, "Error: Invalid request.\n");
return;
}
data += 4; // 跳过\r\n\r\n
// 处理请求内容
// ...
// 发送响应
char response[MAX_MSG_LEN];
sprintf(response, "HTTP/1.1 200 OK\r\nContent-Length: %d\r\n\r\n%s", strlen(data), data);
send(client_sock, response, strlen(response), 0);
}
void* handle_client(void* arg) {
int client_sock = *(int*)arg;
free(arg);
printf("Client connected. (sock=%d)\n", client_sock);
char message[MAX_MSG_LEN];
while (recv(client_sock, message, MAX_MSG_LEN, 0) > 0) {
printf("Message received. (sock=%d):\n%s\n", client_sock, message);
handle_request(client_sock, message);
memset(message, 0, MAX_MSG_LEN);
}
pthread_mutex_lock(&client_mutex);
for (int i = 0; i < client_count; i++) {
if (clients[i] == client_sock) {
clients[i] = clients[client_count-1];
client_count--;
break;
}
}
pthread_mutex_unlock(&client_mutex);
printf("Client disconnected. (sock=%d)\n", client_sock);
close(client_sock);
pthread_exit(NULL);
}
int main() {
// 创建套接字
int server_sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
// 绑定地址
struct sockaddr_in server_addr;
memset(&server_addr, 0, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
server_addr.sin_port = htons(8080);
bind(server_sock, (struct sockaddr*)&server_addr, sizeof(server_addr));
// 监听连接请求
listen(server_sock, MAX_CLIENTS);
// 初始化客户端列表锁
pthread_mutex_init(&client_mutex, NULL);
printf("Server started. (port=%d)\n", ntohs(server_addr.sin_port));
// 接收连接并启动处理线程
while (1) {
int* client_sock = malloc(sizeof(int));
*client_sock = accept(server_sock, NULL, NULL);
pthread_mutex_lock(&client_mutex);
if (client_count < MAX_CLIENTS) {
clients[client_count++] = *client_sock;
pthread_t tid;
pthread_create(&tid, NULL, handle_client, client_sock);
pthread_detach(tid);
} else {
printf("Too many clients. Connection refused.\n");
close(*client_sock);
free(client_sock);
}
pthread_mutex_unlock(&client_mutex);
}
// 清理锁和套接字
pthread_mutex_destroy(&client_mutex);
close(server_sock);
return 0;
}
```
阅读全文
相关推荐


















