C语言实现多线程和多进程服务器
来源:互联网 发布:服装设计知乎 编辑:程序博客网 时间:2024/06/03 23:50
c语言实现多线程和多进程服务器
多线程
服务端
#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <pthread.h>#include <sys/types.h>#include <sys/socket.h>#include <pthread.h>#include <arpa/inet.h>#include <netinet/in.h>#include <string.h>#define SERV_PORT 10000#define SERV_IP "127.0.0.1"#define MAX_LISTEN_LEN 128//定义结构体,用于传个threadstruct RA{ int connfd; struct sockaddr_in cli_addr;};//处理函数,回显服务器void *thread_func(void *arg){ struct RA *tmpRA = (struct RA *)arg; char buf[BUFSIZ] = {0}; while(1) { memset(buf,0,sizeof(buf)); read(tmpRA->connfd,buf,sizeof(buf)); //printf("client ipaddress is %s\n",inet_ntop(AF_INET,&(tmpRA->cli_addr.sin_addr),NULL,0)); printf("client send is %s\n",buf); write(tmpRA->connfd,buf,sizeof(buf)); } close(tmpRA->connfd); free(tmpRA);}int main(){ struct sockaddr_in serv_addr; struct sockaddr_in cli_addr; int clilen = sizeof(cli_addr); int listenfd,connfd; pthread_t thid; struct RA *threadRa = NULL; //初始化 memset((void *)&serv_addr,0,sizeof(serv_addr)); memset((void *)&cli_addr,0,sizeof(cli_addr)); //serv_addr初始化 serv_addr.sin_family = AF_INET; serv_addr.sin_port = htons(SERV_PORT); serv_addr.sin_addr.s_addr = htonl(INADDR_ANY); listenfd = socket(AF_INET,SOCK_STREAM,0); bind(listenfd,(struct sockaddr*)&serv_addr,sizeof(serv_addr)); listen(listenfd,MAX_LISTEN_LEN); while(1) { connfd = accept(listenfd,(struct sockaddr*)&cli_addr,&clilen); threadRa = (struct RA *)malloc(sizeof(struct RA)); threadRa->connfd = connfd; memcpy(&threadRa->cli_addr,&cli_addr,clilen); //把监听返回的套接字交给线程去处理自己继续监听 pthread_create(&thid,NULL,thread_func,(void *)threadRa); pthread_detach(thid); } return 0;}
客户端
#include <stdio.h>#include <stdlib.h>#include <sys/socket.h>#include <arpa/inet.h>#include <sys/types.h>#include <fcntl.h>#include <unistd.h>#include <netinet/in.h>#include <string.h>#define SERV_IP "127.0.0.1"#define SERV_PORT 10000int main(){ struct sockaddr_in serv_addr; memset((void *)&serv_addr,0,sizeof(struct sockaddr_in)); char recvbuf[BUFSIZ] = {0}; char buf[BUFSIZ] = {0}; //初始化服务端的参数 serv_addr.sin_family = AF_INET; serv_addr.sin_port = htons(SERV_PORT); inet_pton(AF_INET,"127.0.0.1",&serv_addr.sin_addr); int connfd = socket(AF_INET,SOCK_STREAM,0); int n = connect(connfd,(struct sockaddr*)&serv_addr,sizeof(serv_addr)); if(n == -1) { sprintf(stderr,"client connect err"); return -1; } while(1) { memset(buf,0,sizeof(buf)); memset(recvbuf,0,sizeof(recvbuf)); read(STDIN_FILENO,buf,sizeof(buf)); write(connfd,buf,strlen(buf)); int readlen = read(connfd,recvbuf,sizeof(recvbuf)); recvbuf[readlen] = '\0'; printf("recvbuf is %s\n",recvbuf); } return 0;}
0 0
- C语言实现多线程和多进程服务器
- 多进程服务器和多线程服务器的实现
- 实现多进程多线程服务器
- TCP server的实现,和多线程,多进程服务器
- 简版服务器(c语言实现) (多线程)
- linux下 socket tcp Server c语言编写(分别实现单进程,多进程,多线程)
- C语言多线程编程-进程和线程的基本概念
- 多进程、多线程服务器
- 多线程、多进程TCP服务器、进程池和线程池
- Linux下C语言多进程实现
- 用gdb调试多进程和多线程的服务器程序
- 怎么理解并发多进程服务和多线程服务器
- 怎么理解并发多进程服务和多线程服务器
- 基于TCP的多进程和多线程服务器
- 简单多进程和多线程版并发服务器
- 高性能服务器编程--多进程和多线程
- 多进程、多线程服务器程序
- 多进程多线程TCP服务器
- JS网页换肤读取cookie基础案例
- 查看与清空有关浏览器的缓存
- Java选择问题代码
- 基于commons-email,web端发送邮件
- 解析异步消息处理机制
- C语言实现多线程和多进程服务器
- How to install ia32-libs in Ubuntu 14.04 LTS
- 搜索条 searcherBar 去掉灰色背景
- 原型对象关系
- C++调用微软接口kill进程
- 80x86保护模式下特权级转移
- IntelliJ IDEA 2016.2 集成Mercurial 不校验服务器证书
- Java中OutOfMemoryError(内存溢出)的三种情况及解决办法
- C++学习笔记(三)--函数参数,数组函数,指针和const,二维数组函数,递归,函数指针