c语言 TCP多进程创建代码
时间: 2023-10-01 18:08:33 浏览: 82
下面是一个简单的TCP多进程创建代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#define PORT 8888
int main(void) {
int sockfd, newsockfd, pid;
struct sockaddr_in addr;
socklen_t addrlen = sizeof(addr);
char buffer[256];
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0) {
perror("ERROR opening socket");
exit(1);
}
memset(&addr, 0, sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = INADDR_ANY;
addr.sin_port = htons(PORT);
if (bind(sockfd, (struct sockaddr *) &addr, sizeof(addr)) < 0) {
perror("ERROR on binding");
exit(1);
}
listen(sockfd, 5);
while (1) {
newsockfd = accept(sockfd, (struct sockaddr *) &addr, &addrlen);
if (newsockfd < 0) {
perror("ERROR on accept");
exit(1);
}
pid = fork();
if (pid < 0) {
perror("ERROR on fork");
exit(1);
}
if (pid == 0) {
close(sockfd);
memset(buffer, 0, sizeof(buffer));
if (read(newsockfd, buffer, sizeof(buffer)) < 0) {
perror("ERROR reading from socket");
exit(1);
}
printf("Here is the message: %s\n", buffer);
if (write(newsockfd, "I got your message", 18) < 0) {
perror("ERROR writing to socket");
exit(1);
}
exit(0);
}
else {
close(newsockfd);
}
}
close(sockfd);
return 0;
}
```
该代码创建了一个TCP服务器,通过多进程实现并发处理多个客户端请求。主进程负责监听客户端连接请求,并通过fork()函数创建一个子进程来处理客户端请求。子进程负责与客户端通信,读取客户端发送的消息并回复一个固定的消息。
在主循环中,每当有新的客户端连接请求被接受,就会创建一个子进程来处理该请求。子进程通过关闭sockfd来避免竞争条件,并在处理完请求后通过exit(0)退出。父进程则关闭newsockfd,继续监听新的客户端连接请求。
阅读全文