Linux——高性能服务器编程,多进程编程
来源:互联网 发布:plc和单片机有什么区别 编辑:程序博客网 时间:2024/05/01 03:19
Linux——高性能服务器编程,多进程编程
多进程编程思路: 父进程只负责accept ---》fork,子进程负责和客户端进行通讯。
注意:
1、 父子进程共享文件描述符,所以创建出子进程后,没必要单独传递文件描述符。
2、 父进程创建出子进程后, 关闭accept返回的文件描述符。
服务器端代码 ser.c:
#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <assert.h>#include <string.h>#include <sys/types.h>#include <sys/socket.h>#include <arpa/inet.h>#include <fcntl.h>#include <signal.h>void fun(int sign){wait(NULL);}void main(){signal(SIGCHLD, fun);int sockfd = socket(AF_INET, SOCK_STREAM, 0);assert(sockfd != -1);struct sockaddr_in ser, cli;memset(&ser, 0, sizeof(ser));ser.sin_family = AF_INET;ser.sin_port = htons(6500);ser.sin_addr.s_addr = inet_addr("192.168.1.120");int res = bind(sockfd, (struct sockaddr*)&ser, sizeof(ser));assert(res != -1);listen(sockfd, 5);while(1){int len = sizeof(cli);int c = accept(sockfd, (struct sockaddr*)&cli, &len);if(c < 0){printf("error\n");continue;}pid_t n = fork();assert(n != -1);if(n == 0){while(1){char buff[128] = {0};int n = recv(c, buff, 127, 0);if(n <= 0){break;}printf("addr::%s port::%d\n", inet_ntoa(cli.sin_addr), ntohs(cli.sin_port));printf("%s\n", buff);send(c, "OK", 2, 0);}printf("%d unlink\n", c);close(c);exit(0);}close(c);}}
客户端代码 cli.c:
#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <assert.h>#include <string.h>#include <sys/types.h>#include <sys/socket.h>#include <arpa/inet.h>#include <fcntl.h>void main(){int sockfd = socket(AF_INET, SOCK_STREAM, 0);assert(sockfd != -1);struct sockaddr_in ser, cli;memset(&ser, 0, sizeof(ser));ser.sin_family = AF_INET;ser.sin_port = htons(6500);ser.sin_addr.s_addr = inet_addr("192.168.1.120");int res = connect(sockfd, (struct sockaddr*)&ser, sizeof(ser));assert(res != -1);while(1){printf("please input: ");fflush(stdout);char buff[128] = {0};fgets(buff, 128, stdin);if(strncmp(buff, "end", 3) == 0){close(sockfd);break;}send(sockfd, buff, strlen(buff) - 1, 0);memset(buff, 0, 128);recv(sockfd, buff, 127, 0);printf("%s\n", buff);}}
运行结果:
可以支持多个客户端同时访问
阅读全文
0 0
- Linux 高性能服务器编程——多进程编程
- Linux高性能服务器编程——多进程编程
- Linux——高性能服务器编程,多进程编程
- 高性能服务器编程——多进程编程
- linux高性能服务器编程之多进程
- 高性能服务器编程-多进程编程与多线程编程
- Linux 高性能服务器编程——多线程编程
- Linux高性能服务器编程——进程池和线程池
- Linux高性能服务器编程——进程池和线程池
- Linux高性能服务器编程——进程池和线程池
- Linux高性能服务器编程——进程池和线程池
- Linux高性能服务器编程
- Linux高性能服务器编程
- Linux 高性能服务器编程——高性能服务器程序框架
- 《Linux高性能服务器编程》学习笔记——第八章 高性能服务器程序框架
- Linux服务器高性能编程——读书笔记(一)
- Linux服务器高性能编程——读书笔记(二)
- Linux服务器高性能编程——读书笔记(三)
- C++——面向对象(二)——默认的构造函数(2)
- 通过伪类选择器调整链接属性
- Java多线程”JUC”集合中的CopyOnWriteArraySet
- 编译gnutls找不到nettle3.1的问题
- 实现基于Haproxy+Keepalived负载均衡高可用架构
- Linux——高性能服务器编程,多进程编程
- bootstrap之breadcrumb&panel样式
- 在win10中安装并配置多个JDK不同的版本
- Achartengine.jar绘制动态图形二 --柱状图
- PAT (Basic Level) Practise (中文)1048. 数字加密(20)
- mybatis源码分析,sql语句执行的完整流程
- 欢迎使用CSDN-markdown编辑器
- Windows程序设计(4):根据PID,获取句柄Handle
- 为编程踏出的第一步