TCP服务器多线程 多进程简单测试
来源:互联网 发布:js 日期转时间戳 编辑:程序博客网 时间:2024/05/29 18:00
服务器一般都要求可以同时处理 多个客户的数据请求,利用进程和线程可以实现服务器监听和处理的分离,实现同时处理多个客户端的连接请求,
多进程:
#include<stdio.h>#include<stdlib.h>#include<string.h>#include<sys/types.h>#include<sys/socket.h>#include<netinet/in.h>#include<arpa/inet.h>#include<unistd.h>//#include<pthread.h>#include<errno.h>int main(){ int fd = socket(AF_INET,SOCK_STREAM,0); printf("socket id = %d\n",fd); struct sockaddr_in serveraddr; serveraddr.sin_family = AF_INET; serveraddr.sin_port = htons(7777); serveraddr.sin_addr.s_addr = htonl(INADDR_ANY); int err = bind(fd,(struct sockaddr *)&serveraddr,sizeof(serveraddr)); if(err < 0) { fprintf(stderr,"bind error:%s\n",strerror(err)); return -1; } listen(fd,5); int newfd; struct sockaddr_in peer; socklen_t size; size = sizeof(peer); while(1) { printf("waiting for cilent connectting...\n"); newfd = accept(fd,(struct sockaddr *)&peer,&size); printf("ip:%s,port:%d\n",inet_ntoa(peer.sin_addr),ntohs(peer.sin_port)); int pid = fork(); if(pid == 0) { char buff[100]; int cnt; while(1) { fprintf(stdout,"pid:%u\n",getpid()); cnt = read(newfd,buff,100); write(1,buff,cnt); buff[cnt] = '\0'; if(strncmp(buff,"quit",4)==0) break; } close(newfd); } } close(fd); return 0;}
多线程:
#include<stdio.h>#include<stdlib.h>#include<string.h>#include<sys/types.h>#include<sys/socket.h>#include<netinet/in.h>#include<arpa/inet.h>#include<unistd.h>#include<pthread.h>#include<errno.h>void *thread_fun(void *arg){ int newfd = (int)arg; char buff[100]; int cnt; while(1) { fprintf(stdout,"thread:%u\n",pthread_self()); cnt = read(newfd,buff,100); write(1,buff,cnt); buff[cnt] = '\0'; if(strncmp(buff,"quit",4)==0) break; } close(newfd);}int main(){ int fd = socket(AF_INET,SOCK_STREAM,0); printf("socket id = %d\n",fd); struct sockaddr_in serveraddr; serveraddr.sin_family = AF_INET; serveraddr.sin_port = htons(7777); serveraddr.sin_addr.s_addr = htonl(INADDR_ANY); int err = bind(fd,(struct sockaddr *)&serveraddr,sizeof(serveraddr)); if(err < 0) { fprintf(stderr,"bind error:%s\n",strerror(err)); return -1; } while(1){ listen(fd,5); int newfd; struct sockaddr_in peer; socklen_t size; size = sizeof(peer); while(1) { printf("waiting for cilent connectting...\n"); newfd = accept(fd,(struct sockaddr *)&peer,&size); printf("ip:%s,port:%d\n",inet_ntoa(peer.sin_addr),ntohs(peer.sin_port)); pthread_t tid; pthread_create(&tid,NULL,thread_fun,(void *)newfd); } } close(fd); return 0;}
0 0
- TCP服务器多线程 多进程简单测试
- 多进程多线程TCP服务器
- 简单的网络服务器(简单的TCP,简单的UDP,多进程多线程TCP)
- 【网络】实现简单的TCP、UDP服务器、TCP多进程/多线程服务器
- 多线程、多进程TCP服务器比较
- 多线程、多进程TCP服务器、进程池和线程池
- 多进程多线程TCP服务器以及进程池
- 基于tcp的小型服务器(多线程多进程)
- 基于TCP的多进程和多线程服务器
- TCP server的实现,和多线程,多进程服务器
- 基于socket的Tcp多进程多线程服务器
- 多进程、多线程服务器
- 简单的多线程的TCP服务器代码
- 简单多进程和多线程版并发服务器
- python 多线程与多进程的简单测试比较
- tcp多进程并发服务器
- TCP多进程并发服务器
- Linux TCP server系列(1)-简单TCP服务器+多进程处理客户请求
- C语言提高之技术模型层次、学习标准、特点、内存四区、函数调用模型
- 深入解析Oracle学习笔记(第九章)
- JVM 并发性: Java 和 Scala 并发性基础
- 无题 (最短路)
- iOS键盘高度,键盘弹出视图上移动
- TCP服务器多线程 多进程简单测试
- 移植expect出现的错误提示,以及解决办法
- HDOJ 1272 小希迷宫 (并查集)
- C++基础---string类的capacity/max_size/size/length/empty/reserve/resize
- hdu 5411 CRB and Puzzle 矩阵快速幂
- 图数据库之neo4j-jdbc的使用
- HDU 4705 Y (树形DP)
- HDU 5334(Virtual Participation-(A+C+1)(B+C+1)=K+(1+C)^2-C)
- ACdream 1073