linux多进程(fork)
来源:互联网 发布:淘宝店铺水印笔刷 编辑:程序博客网 时间:2024/05/29 16:33
1、服务器端代码
#include<stdio.h>#include<sys/types.h>#include<sys/socket.h>#include<stdlib.h>#include<arpa/inet.h>#include<string.h>#include<netinet/in.h>int startup(const char *_ip,int _port){int sock = socket(AF_INET,SOCK_STREAM,0);if(sock < 0){perror("socket");exit(1);}struct sockaddr_in local;local.sin_family = AF_INET;local.sin_port = htons(_port);local.sin_addr.s_addr = inet_addr(_ip);socklen_t lenth = sizeof(local);int opt = 1;setsockopt(sock,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt));if(bind(sock,(struct sockaddr*)&local,lenth) < 0){perror("bind");exit(2);}if(listen(sock,10) < 0){perror("listen");exit(3);}return sock;}static void usage(const char* proc){printf("[local_ip] [local_port]\n",proc);}int main(int argc,char *argv[]){if(argc != 3){usage(argv[0]);return 1;}int listen_sock = startup(argv[1],atoi(argv[2]));struct sockaddr_in client;socklen_t len = sizeof(client);while(1){int new_sock = accept(listen_sock,(struct sockaddr*)&client,&len);if(new_sock < 0){perror("new_sock");exit(0);}else{pid_t id = fork();if(id == 0){//childif(fork() > 0){exit(0);}close(listen_sock);char buf[1024];while(1){ssize_t s = read(new_sock,buf,sizeof(buf)-1);if(s > 0){buf[s] = 0;printf("client say# %s\n",buf);write(new_sock,buf,strlen(buf));}else if(s == 0){perror("client quit!");break;}else{break;}}exit(0);}else{//fatherclose(new_sock);//if(fork() > 0){//exit(0);//}}}}return 0;}
2、客户端代码
#include<stdio.h>#include<sys/types.h>#include<sys/socket.h>#include<stdlib.h>#include<arpa/inet.h>#include<string.h>#include<netinet/in.h>int startup(const char *_ip,int _port){int sock = socket(AF_INET,SOCK_STREAM,0);if(sock < 0){perror("socket");exit(1);}struct sockaddr_in local;local.sin_family = AF_INET;local.sin_port = htons(_port);local.sin_addr.s_addr = inet_addr(_ip);socklen_t lenth = sizeof(local);int opt = 1;setsockopt(sock,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt));if(bind(sock,(struct sockaddr*)&local,lenth) < 0){perror("bind");exit(2);}if(listen(sock,10) < 0){perror("listen");exit(3);}return sock;}static void usage(const char* proc){printf("[local_ip] [local_port]\n",proc);}int main(int argc,char *argv[]){if(argc != 3){usage(argv[0]);return 1;}int listen_sock = startup(argv[1],atoi(argv[2]));struct sockaddr_in client;socklen_t len = sizeof(client);while(1){int new_sock = accept(listen_sock,(struct sockaddr*)&client,&len);if(new_sock < 0){perror("new_sock");exit(0);}else{pid_t id = fork();if(id == 0){//childif(fork() > 0){exit(0);}close(listen_sock);char buf[1024];while(1){ssize_t s = read(new_sock,buf,sizeof(buf)-1);if(s > 0){buf[s] = 0;printf("client say# %s\n",buf);write(new_sock,buf,strlen(buf));}else if(s == 0){perror("client quit!");break;}else{break;}}exit(0);}else{//fatherclose(new_sock);//if(fork() > 0){//exit(0);//}}}}return 0;}
3、运行结果
阅读全文
0 0
- linux多进程(fork)
- Linux多进程-fork()
- linux进程(fork,waitpid)
- linux进程(fork,waitpid)
- linux进程(fork,waitpid)
- linux(一)------多进程并发服务器实现(fork)
- linux多进程的总结(fork用法)
- linux多进程的总结(fork用法)
- Linux多进程之fork()函数
- Linux多进程中的fork与vfork
- Linux基础(三)fork()进程
- linux进程控制(fork,getpid,lockf)
- Linux 进程学习1 --fork()函数
- linux c 进程创建fork()
- Linux基础(二)fork()进程
- Linux进程,fork-专研精讲(实例讲解)!!!
- linux子进程fork
- Linux:fork进程创建
- 机器学习算法之随机森林(1)pyspark.mllib中的RF
- pat-a1053. Path of Equal Weight (30)
- 2017.5月份总结
- Problem D: qwb与神奇的序列
- 延迟渲染中光源的体积光(Light Volumn)
- linux多进程(fork)
- 什么是线程
- VS中printf参数研究
- Vue.js 学习2 实例
- 机器学习的明天——迁移学习
- 【微营销】第10天 微营销实战技巧之如何通过微博做活动,增加粉丝关注度
- Drupal 8 模块开发 及页面无法显示原因总结
- 多线程知识点总结
- 栈的链式结构