Linux下socket编程之多进程TCP服务器端
2017-06-03 14:36
381 查看
代码如下:
tcp_server.c
这个和tcp的区别不是很大,只是把本来一个程序做的事情分成了两份,用一个饭店来作比喻,前一个单进程是门前招呼客人的门童要同时担任给客人点菜的职能,所以一次只能有一个客户在点餐,直到这个客人走了门童才回去去门口招揽其他的客人进店,现在多进程就是门童招揽客人招揽完了把客人交给服务员,然后门童就回到门口继续招揽客人,服务员负责客人点菜,这样的话就可以有多个客人同时在饭店就餐,这就是多进程。
客户端程序就是使用tcp客户端就可以了,在这就不再把代码给出,如果需要请参考Linux下socket编程之TCP
下面为测试:
服务器端:
客户端1:
客户端2:
这就是多进程的tcp 欢迎大家评论
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 欢迎大家评论
相关文章推荐
- Linux下基本TCP socket编程之服务器端
- Linux下基本TCP socket编程之服务器端
- Linux下基本TCP socket编程之服务器端
- Linux socket编程入门及客户端服务器端通信实现 – 提高篇:TCP连接过程分析
- TCP多进程并发服务端 Linux socket编程入门(2)
- linux基础编程 套接字socket 完整的服务器端多线程socket程序
- linux socket网络编程:fcntl select(多个客户端连接服务器端情形)
- Linux C socket 编程之TCP
- linux socket编程之TCP与UDP
- linux socket编程之TCP与UDP
- linux下C++SocketTCP编程---服务器端
- unix/linux socket 编程一,简单多进程tcp socket server流程
- linux基础编程 套接字socket 完整的服务器端多线程socket程序
- Linux socket编程学习初步(4)--服务器端多进程
- Linux下面socket编程的非阻塞TCP
- Linux C socket 编程之TCP
- linux网络socket编程服务器端(tcp/udp)
- Linux下面socket编程的非阻塞TCP研究
- Linux下Socket编程之TCP应用
- Linux socket编程(TCP,UDP,RAW)