目录

TCP协议Linux多进程服务器代码模板:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <arpa/inet.h>
#include <signal.h>
#include <sys/wait.h>
#include <errno.h>
// 信号捕捉函数
void recycleChild(int num)
{
// 资源回收
while(1)
{
int ret = waitpid(-1, NULL, WNOHANG);
if(ret == -1)
{
printf("所有的子进程回收完毕!!!\n");
break;
}
else if(ret == 0)
{
printf("剩下的子进程都还活着!!!\n");
break;
}
else
{
printf("child die, pid = %d\n", ret);
}
}
}
int main()
{
// 1. 创建用于监听的套接字
int fd = socket(AF_INET, SOCK_STREAM, 0);
if(fd == -1)
{
perror("socket");
exit(0);
}
// 2. 绑定
struct sockaddr_in addr;
addr.sin_family = AF_INET; // ipv4
addr.sin_port = htons(8989); // 字节序应该是网络字节序
//inet_pton(AF_INET, "127.0.0.1", &addr.sin_addr.s_addr);
addr.sin_addr.s_addr = INADDR_ANY; // == 0, 获取IP的操作交给了内核
int ret = bind(fd, (struct sockaddr*)&addr, sizeof(addr));
if(ret == -1)
{
perror("bind");
exit(0);
}
// 3.设置监听
ret = listen(fd, 100);
if(ret == -1)
{
perror("listen");
exit(0);
}
// 注册新号捕捉
struct sigaction act;
act.sa_flags = 0;
act.sa_handler = recycleChild;
sigemptyset(&act.sa_

这篇博客介绍了如何在Linux环境下,使用C/C++实现基于TCP协议的通信。提供了多进程和多线程两种服务器的代码模板,以及客户端的代码示例,并强调在编译时需要链接pthread库。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



