linux socket多进程并发服务器
来源:互联网 发布:张爱玲小说 知乎 编辑:程序博客网 时间:2024/06/05 15:26
/***sever***/ #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <unistd.h> #include <sys/select.h> #include <stdlib.h> #include <stdio.h> #include <string.h> #define PORT 1234 #define MAXSOCKFD 10 void main() { int sockfd,newsockfd,is_connected[MAXSOCKFD],fd; struct sockaddr_in addr; int addr_len = sizeof(struct sockaddr_in); fd_set readfds; char buffer[256]; char msg[ ] ="Welcome to server!"; pid_t pid; if ((sockfd = socket(AF_INET,SOCK_STREAM,0))<0) { perror("socket"); exit(1); } bzero(&addr,sizeof(addr)); addr.sin_family =AF_INET; addr.sin_port = htons(PORT); addr.sin_addr.s_addr = htonl(INADDR_ANY); if(bind(sockfd,&addr,sizeof(addr))<0) { perror("connect"); exit(1); } if(listen(sockfd,3)<0) { perror("listen"); exit(1); } while(1) { FD_ZERO(&readfds); if((newsockfd = accept (sockfd,&addr,&addr_len))<0) { perror("accept"); continue; } if ((pid = fork()) != 0) { close(newsockfd); continue; } FD_SET(newsockfd, &readfds); printf("cnnect from %s\n",inet_ntoa(addr.sin_addr)); printf("pid = %d, ppid = %d\n", getpid(), getppid()); write(newsockfd,msg,sizeof(msg)); while(1) { /*描述符无变化,数据将阻塞*/ if (!select(MAXSOCKFD, &readfds, NULL, NULL, 0)) { continue; } if(read(newsockfd,buffer,sizeof(buffer))<=0) { printf("connect closed.\n"); close(newsockfd); break; } else { printf("From client: %d\n",buffer[0]); if (write(newsockfd, buffer, strlen(buffer)) < 0) perror("write"); printf("To client: %d\n\n",buffer[0]); } } } } /****client****/ #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <stdlib.h> #include <stdio.h> #define PORT 1234 #define SERVER_IP "127.0.0.1" main() { int s; struct sockaddr_in addr; char buffer[256]; static int flag = 1; if((s = socket(AF_INET,SOCK_STREAM,0))<0) { perror("socket"); exit(1); } /* 填写sockaddr_in结构*/ bzero(&addr,sizeof(addr)); addr.sin_family = AF_INET; addr.sin_port=htons(PORT); addr.sin_addr.s_addr = inet_addr(SERVER_IP); /* 尝试连线*/ if(connect(s,&addr,sizeof(addr))<0) { perror("connect"); exit(1); } /* 接收由server端传来的信息*/ recv(s,buffer,sizeof(buffer),0); printf("%s\n",buffer); while(1) { bzero(buffer,sizeof(buffer)); /* 从标准输入设备取得字符串*/ if (flag == 1) { read(STDIN_FILENO,buffer,sizeof(buffer)); printf("Insert data:%s\n", buffer); flag = 0; } else { read(s,buffer,sizeof(buffer)); printf("From sever: %d\n\n", buffer[0]); } /* 将字符串传给server端*/ sleep(2); buffer[0] += 1; if(write(s,buffer,sizeof(buffer))<0) { perror("send"); exit(1); } printf("To sever: %d\n", buffer[0]); } }
- linux socket多进程并发服务器
- 使用socket的Linux上的C语言helloworld多进程并发服务器
- 使用socket的Linux上的C语言helloworld多进程并发服务器
- 使用socket的Linux上的C语言helloworld多进程并发服务器
- linux网络编程多进程并发服务器
- linux网络编程多进程并发服务器
- Linux TCP多进程并发服务器
- C-socket编程-多进程版并发服务器
- socket 并发服务器 代码案例 (多进程模式)
- Linux之并发进程服务器
- 多进程并发服务器
- 并发服务器---多进程
- Linux回射服务器(一):多进程实现并发
- linux(一)------多进程并发服务器实现(fork)
- 聊聊Linux fork多进程并发服务器模型
- Linux并发服务器编程之多进程并发服务器
- 多进程并发服务器编程
- 多进程并发服务器编程
- Android多线程任务优化2:实现后台预读线程 .
- xmal文件小解
- A.equals(B)用法
- awk里面的数组很好用
- 【代码】POJ 2942
- linux socket多进程并发服务器
- 多态实现
- 设计模式之享元模式
- 11G R2 RAC(ASM)对资源操作命令
- JavaScript eval() 函数
- Unity3D ——强大的跨平台3D游戏开发工具(一)
- 软件测试面试题及解析(二)
- NLP常用工具 from:http://www.cppblog.com/baby-fly/archive/2010/10/08/129003.html
- PHP学习笔记——单双引号,转义字符。