Linux下socket编程之多进程TCP服务器端
来源:互联网 发布:java iterator() 编辑:程序博客网 时间:2024/06/08 11:57
代码如下:
tcp_server.c
#include<string.h>#include<stdlib.h>#include<stdio.h>#include<sys/types.h>#include<sys/socket.h>#include<netinet/in.h>#include<unistd.h>static void usage(char* proc){ printf("usage:%s[ip][port]",proc);}ssize_t startup(char*ip,char*port){ ssize_t sock=socket(AF_INET,SOCK_STREAM,0); if(sock<0) { perror("socket"); return 3; } struct sockaddr_in server_addr; server_addr.sin_family=AF_INET; server_addr.sin_port=htons(atoi(port)); server_addr.sin_addr.s_addr=inet_addr(ip); if(bind(sock,(struct sockaddr*)&server_addr,sizeof(server_addr))<0) { perror("bind"); return 4; } if(listen(sock,10)<0) { perror("listen"); return 5; } return sock;}int main(int argc,char* argv[]){ if(argc!=3) { usage(argv[0]); return 1; } ssize_t listen_sock=startup(argv[1],argv[2]); struct sockaddr_in client_addr; socklen_t len=sizeof(client_addr); while(1) { ssize_t new_sock=accept(listen_sock,(struct sockaddr*)&client_addr,&len); if(new_sock<0) { perror("accept"); return 2; } char buff[1024]; pid_t id=fork(); if(id==0)//子进程处理 { close(listen_sock); while(1) { ssize_t s=read(new_sock,buff,sizeof(buff)); if(s>0) { buff[s]='\0'; printf("client:#%s",buff); write(new_sock,buff,strlen(buff)); } if(s==0) { printf("client quit!\n"); fflush(stdout); break; } } return 0; } if(id>0)//问题:如果监听进程创建子进程退出以后那么监听进程的pid是一直在变化的。想要kill掉这个进程得不停的查询。 { close(new_sock); if(fork()>0)//用父进程创建一个子进程来接替监听任务,父进程退出以后子进程变为孤儿进程,由操作系统来回收其资源。 { exit(0); } } } return 0;}
这个和tcp的区别不是很大,只是把本来一个程序做的事情分成了两份,用一个饭店来作比喻,前一个单进程是门前招呼客人的门童要同时担任给客人点菜的职能,所以一次只能有一个客户在点餐,直到这个客人走了门童才回去去门口招揽其他的客人进店,现在多进程就是门童招揽客人招揽完了把客人交给服务员,然后门童就回到门口继续招揽客人,服务员负责客人点菜,这样的话就可以有多个客人同时在饭店就餐,这就是多进程。
客户端程序就是使用tcp客户端就可以了,在这就不再把代码给出,如果需要请参考Linux下socket编程之TCP
下面为测试:
服务器端:
客户端1:
客户端2:
这就是多进程的tcp 欢迎大家评论
阅读全文
0 0
- Linux下socket编程之多进程TCP服务器端
- Linux下socket编程之多线程TCP服务器
- Linux下Socket编程(TCP)
- Linux下TCP Socket编程
- Linux 下 C++ Socket编程 服务器端
- linux网络socket编程服务器端(tcp/udp)
- TCP的socket的服务器端和客户端实例(linux下)
- linux下C 编程学习之多进程编程(一)
- Linux socket编程学习初步(4)--服务器端多进程
- linux socket tcp server 解决客户端socket断开后, 服务器端进程退出的问题
- Linux下Socket编程之TCP原理
- Linux下Socket编程之TCP应用
- Linux下socket编程,附带tcp例子
- linux下socket编程(1)tcp
- linux下TCP/socket编程实例
- Linux下基于TCP的Socket编程
- Linux下TCP/IP socket 编程二
- linux下C语言 socket tcp编程
- JPEG解码实验
- 玲珑杯1128--线段树模板
- CentOS7 下 python2.7.5 安装 pip 后再安装 requests包
- Virtualbox如何配置Linux的网络连接
- 灯泡开关案例
- Linux下socket编程之多进程TCP服务器端
- android Snackbar
- 非参数估计:parzen窗发与kn近领法
- PlaidCTF2017之zipper
- 生活偶记
- AbStractRotingDataSource源码解析
- 包含bfile数据列的表
- 快速排序
- mysql高级教程-02