多进程多线程服务器编写
来源:互联网 发布:优化关键词技巧 编辑:程序博客网 时间:2024/06/15 14:33
多线程
int main(int argc,char* argv[]){ if(argc!=3) { printf("Usage:%s [service ip][service port]\n",argv[0]); return 1; } int sock=socket(AF_INET,SOCK_STREAM,0); //create ipv4 socket struct sockaddr_in server_socket; struct sockaddr_in client_socket; bzero(&server_socket,sizeof(server_socket)); //fill addr port server_socket.sin_family=AF_INET; server_socket.sin_addr.s_addr=inet_addr(argv[1]); server_socket.sin_port=htons(atoi(argv[2])); if(bind(sock,(struct sockaddr*)&server_socket,sizeof(struct sockaddr_in))<0) { perror("bind"); close(sock); return 1; } if(listen(sock,10)<0) { printf("listen error ,error code is %d,error string is :%s\n",errno,strerror(errno)); close(sock); return 2; } printf("bind and listen sucess,wait accept..\n"); for(;;) { socklen_t len=sizeof(client_socket); //int client_sock=accept(sock,(struct sockaddr*)&client_socket,&len); //return fd int new_sock=accept(sock,(struct sockaddr*)&client_socket,&len); //return fd if(new_sock<0) { //perror("accept "); continue; } printf("get new client!,[%s:%d]\n",\ inet_ntoa(client_socket.sin_addr)\ ,ntohs(client_socket.sin_port)); char buf[1024]; pid_t id=fork();//创建子进程 if(id<0) { //perror("fork"); close(new_sock); continue; } else if(id==0) {//chilld if(fork()>0) { exit(0); } close(sock); //... //provide service //read &write while(1) { ssize_t s=read(new_sock,buf,sizeof(buf)); if(s>0) { buf[s]=0; printf("Client #:%s\n",buf); write(new_sock,buf,strlen(buf)); }else if(s==0) { printf("client quit!\n"); break; } else { perror("read"); } } } else {//father waitpid(id,NULL,0); close(new_sock); } close(new_sock); } return 0;}
多线程
/************************************************************************* > File Name: service.c > Author: steve_abelieve > Mail: caoliang2025@foxmail.com > Created Time: Wed 26 Jul 2017 02:03:25 AM PDT ************************************************************************/#include<sys/socket.h>#include<sys/types.h>#include<stdio.h>#include<arpa/inet.h>#include<stdlib.h>#include<errno.h>#include<string.h>#include<pthread.h>//multipthreadvoid* request(void* argc){ //server : read&write int new_sock=(int)argc; char buf[1024]; while(1) { ssize_t s=read(new_sock,buf,sizeof(buf)); if(s>0) { buf[s]=0; printf("Client #:%s\n",buf); write(new_sock,buf,strlen(buf)); }else if(s==0) { printf("client quit!\n"); }else { perror("read"); } } close(new_sock);}int main(int argc,char* argv[]){ if(argc!=3) { printf("Usage:%s [service ip][service port]\n",argv[0]); return 1; } int sock=socket(AF_INET,SOCK_STREAM,0); //create ipv4 socket struct sockaddr_in server_socket; struct sockaddr_in client_socket; bzero(&server_socket,sizeof(server_socket));//fill addr port server_socket.sin_family=AF_INET; server_socket.sin_addr.s_addr=inet_addr(argv[1]); server_socket.sin_port=htons(atoi(argv[2])); if(bind(sock,(struct sockaddr*)&server_socket,sizeof(struct sockaddr_in))<0) { perror("bind"); close(sock); return 1; } if(listen(sock,10)<0) { printf("listen error ,error code is %d,error string is :%s\n",errno,strerror(errno)); close(sock); return 2; } printf("bind and listen sucess,wait accept..\n"); while(1) { socklen_t len=sizeof(client_socket); int new_sock=accept(sock,(struct sockaddr*)&client_socket,&len); if(new_sock<0) { perror("accept"); continue; } printf("get new client![%s:%d]\n",\ inet_ntoa(client_socket.sin_addr)\ ,ntohs(client_socket.sin_port)); pthread_t pid; //pthread_create(&pid,NULL,request,(void*)client_socket.sin_addr); pthread_create(&pid,NULL,request,(void*)new_sock); //detach pthread_detach(pid); //线程分离,防止一个线程出现错误,导致整个进程终止 } close(sock);return 0;}
阅读全文
0 0
- 多进程多线程服务器编写
- 多进程多线程服务器(tcp_server)编写
- 使用 acl::master_threads 类编写多进程多线程服务器程序
- 多进程、多线程服务器
- 实现多进程多线程服务器
- 多进程、多线程服务器程序
- 多进程多线程TCP服务器
- socket--多进程,多线程服务器
- TCP服务器多线程 多进程简单测试
- 多进程、多线程并发服务器代码
- 多线程、多进程TCP服务器比较
- 多线程、多进程TCP服务器、进程池和线程池
- 多线程多进程服务器与进程线程池
- 多进程多线程TCP服务器以及进程池
- Python版单进程、多进程、多线程服务器
- 多进程xmlrpc服务器(附:多线程xmlrpc服务器)
- 多进程服务器和多线程服务器的实现
- 编写简单多线程web服务器
- 优先队列
- 棋盘问题
- WebRTC 音频处理流程(一)
- awk内置函数
- tcp_server
- 多进程多线程服务器编写
- Hibernate学习之---深入理解持久化对象
- HDU 1540 线段树(区间查询)
- Django框架之模版(template)详细介绍
- awk入门
- maven项目搭建dubbo的消费者和生产者
- C++字符串和整数相互转换
- 如何使用Python plt像MATLAB一样绘图
- python3 [爬虫入门实战]爬虫之scrapy爬取中华人民共和国民政部