博客
关于我
linux的基础知识——多进程并发服务器
阅读量:764 次
发布时间:2019-03-23

本文共 1823 字,大约阅读时间需要 6 分钟。

1.实现一个多进程的并发服务器

#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define SERV_IP "192.168.0.2"#define SERV_PORT 8888void wait_child(int signo) { while (waitpid(0, NULL, WNOHANG) > 0) { return; } return;}int main() { pid_t pid; int lfd, cfd; struct sockaddr_in serv_addr, cli_addr; socklen_t cli_addr_len; char buf[BUFSIZ]; int n, i, ret; lfd = socket(AF_INET, SOCK_STREAM, 0); if (lfd == -1) { perror("socket error"); exit(1); } bzero(&serv_addr, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; serv_addr.sin_port = htons(SERV_PORT); //serv_addr.sin_addr.s_addr = inet_pton(AF_INET, SERV_IP, &serv_addr.sin_addr.s_addr); serv_addr.sin_addr.s_addr = htonl(INADDR_ANY); ret = bind(lfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)); if (ret == -1) { perror("bind error"); exit(1); } ret = listen(lfd, 128); if (ret == -1) { perror("listen error"); exit(1); } while (1) { cli_addr_len = sizeof(cli_addr); cfd = accept(lfd, (struct sockaddr *)&cli_addr, &cli_addr_len); if (cfd == -1) { perror("accept error"); exit(1); } printf("client IP:%s,port:%d\n", inet_ntop(AF_INET, &cli_addr.sin_addr.s_addr, cli_IP, sizeof(cli_IP)), ntohs(cli_addr.sin_port)); pid = fork(); if (pid < 0) { perror("fork error"); exit(1); } else if (pid == 0) { close(lfd); while (1) { n = read(cfd, buf, sizeof(buf)); if (n == 0) { close(cfd); return 0; } else if (n == -1) { perror("read error"); exit(1); } else { for (i = 0; i < n; i++) { if (buf[i] == '\n') { buf[i] = '\0'; } } } } } }}

改写说明:

  • 保持了代码的基础功能,但添加了更多注释,方便理解
  • 逐步解释了实现的关键点:
    • socket类型与协议
    • 地址类型与端口设置
    • bind接口的实现
    • listen接口的实现
    • accept接口的实现
    • client处理流程
  • 保持了代码的结构和流程,但增加了对关键部分的解释
  • 采用了更清晰的段落结构,便于技术人员阅读
  • 保留了错误处理代码,但突出了关键部分的实现
  • 转载地址:http://sulzk.baihongyu.com/

    你可能感兴趣的文章
    Objective-C实现图像二维熵的图像信号丢失检测(附完整源码)
    查看>>
    Objective-C实现图像去雾算法(附完整源码)
    查看>>
    Objective-C实现图像灰度变换(附完整源码)
    查看>>
    Objective-C实现图层混合算法(附完整源码)
    查看>>
    Objective-C实现图片erosion operation侵蚀操作算法(附完整源码)
    查看>>
    Objective-C实现图片的放大缩小(附完整源码)
    查看>>
    Objective-C实现图片腐蚀(附完整源码)
    查看>>
    Objective-C实现图片膨胀(附完整源码)
    查看>>
    Objective-C实现图的邻接矩阵(附完整源码)
    查看>>
    Objective-C实现圆球的表面积和体积(附完整源码)
    查看>>
    Objective-C实现在Regex的帮助下检查字谜算法(附完整源码)
    查看>>
    Objective-C实现均值滤波(附完整源码)
    查看>>
    Objective-C实现埃拉托斯特尼筛法算法(附完整源码)
    查看>>
    Objective-C实现域名解析(附完整源码)
    查看>>
    Objective-C实现域名转IP(附完整源码)
    查看>>
    Objective-C实现培根密码算法(附完整源码)
    查看>>
    Objective-C实现基于 LIFO的堆栈算法(附完整源码)
    查看>>
    Objective-C实现基于 LinkedList 的添加两个数字的解决方案算法(附完整源码)
    查看>>
    Objective-C实现基于事件对象实现线程同步(附完整源码)
    查看>>
    Objective-C实现基于文件流拷贝文件(附完整源码)
    查看>>