TCP服务器的单进程实现
来源:互联网 发布:威纶触摸屏数据导出 编辑:程序博客网 时间:2024/05/16 13:56
一、tcp_server(TCP服务器)
//tcp_server.c代码 1 #include<stdio.h> 2 #include<sys/types.h> 3 #include<sys/socket.h> 4 #include<string.h> 5 #include<netinet/in.h> 6 #include<arpa/inet.h> 7 #include<string.h> 8 #include<stdlib.h> 9 10 static void usage(const char* proc) 11 { 12 printf("%s [local_ip][local_port]\n",proc); 13 } 14 15 int startup(const char* _ip, int _port) 16 { 17 int sock = socket(AF_INET, SOCK_STREAM, 0); 18 if(sock < 0) 19 { 20 perror("socket"); 21 exit(2); 22 } 23 struct sockaddr_in local; 24 local.sin_family = AF_INET; 25 local.sin_port = htons(_port); 26 local.sin_addr.s_addr = inet_addr(_ip); 27 if( bind(sock,(struct sockaddr *)&local,sizeof(local)) < 0) 28 { 29 perror("bind"); 30 exit(3); 31 } 32 if(listen(sock, 5) < 0 ) 33 { 34 perror("listen"); 35 exit(4); 36 } 37 return sock; 38 } 39 40 int main(int argc , char* argv[]) 41 { 42 if(argc < 3) 43 { 44 usage(argv[0]); 45 return 1; 46 } 47 int listen_sock=startup(argv[1],atoi(argv[2])); 48 while(1) 49 { 50 struct sockaddr_in client; 51 socklen_t len = sizeof(client); 52 int new_fd = accept(listen_sock,(struct sockaddr *)&client, &len ); 53 if(new_fd < 0) 54 { 55 perror("accept"); 56 //can not exit; 57 continue; 58 } 59 printf("get a new client\n"); 60 while(1) 61 { 62 char buf[1024]; 63 ssize_t s=read(new_fd,buf,sizeof(buf)-1); 64 if(s > 0) 65 { 66 buf[s]=0; 67 printf("client: %s\n",buf); 68 write(new_fd,buf,strlen(buf)); 69 } 70 else 71 { 72 printf("read done ....,break\n"); 73 break; 74 } 75 } 76 } 77 return 0; 78 }
二、tcp_client(TCP客户端)
//tcp_client代码 1 #include<stdio.h> 2 #include<sys/types.h> 3 #include<sys/socket.h> 4 #include<string.h> 5 #include<netinet/in.h> 6 #include<arpa/inet.h> 7 #include<stdlib.h> 8 #include<string.h> 9 static void usage(const char* proc) 10 { 11 printf("%s [local_ip][local_port]\n",proc); 12 } 13 14 int main(int argc , char* argv[]) 15 { 16 if(argc < 3) 17 { 18 usage(argv[0]); 19 return 1; 20 } 21 int sock = socket(AF_INET, SOCK_STREAM, 0); 22 if(sock < 0) 23 { 24 perror("socket"); 25 return 2; 26 } 27 struct sockaddr_in remote; 28 remote.sin_family=AF_INET; 29 remote.sin_port=htons(atoi(argv[2])); 30 remote.sin_addr.s_addr=inet_addr(argv[1]); 31 if(connect(sock,(struct sockaddr *)&remote, sizeof(remote)) < 0 ) 32 { 33 perror("connect"); 34 return 3; 35 } 36 while(1) 37 { 38 char buf[1024]; 39 printf("Please Enter #"); 40 fflush(stdout); 41 ssize_t s=read(0, buf, sizeof(buf)-1); 42 if(s > 0) 43 { 44 buf[s-1]=0; 45 write(sock, buf, strlen(buf)); 46 ssize_t _s=read(sock, buf, sizeof(buf)-1); 47 if(_s > 0) 48 { 49 buf[_s]=0; 50 printf("server echo# %s\n",buf); 51 } 52 } 53 } 54 return 0; 55 }
三、结果图
四、总结
以上的代码还有待修改它只能实现单进程的连接服务器
阅读全文
0 0
- TCP服务器的单进程实现
- Linux下的单进程多用户TCP服务器,采用select方法实现。
- 进程实现tcp服务器
- 基于select函数的单进程并发服务器程序----TCP
- socket编程之TCP单进程的服务器
- Linux网络编程:TCP服务器(单进程多用户),使用select方法实现
- Linux网络编程:TCP服务器(单进程多用户),使用select方法实现
- Linux网络编程:TCP服务器(单进程多用户),使用select方法实现
- Linux网络编程:TCP服务器(单进程多用户),使用select方法实现
- Linux网络编程:TCP服务器(单进程多用户),使用select方法实现
- TCP server的实现,和多线程,多进程服务器
- 【网络】实现简单的TCP、UDP服务器、TCP多进程/多线程服务器
- UNIX网络编程学习(15)--使用单进程和select的TCP服务器程序
- select函数的单进程和TCP回射服务器应用模型
- 单进程多线程并发服务器实现
- socket编程之TCP单进程客户服务器
- socket编程(TCP单进程客户服务器通信)
- 单进程select版-TCP服务器(python 版)
- 小米-懂二进制 华为-最高分是多少
- Quartz任务调度(4)JobListener分版本超详细解析
- 消息队列应用场景
- 排序
- Hibernate专题6——注解配置
- TCP服务器的单进程实现
- HDU 6024 Building Shops(DP)
- Linux-环境变量与文件查找
- [BZOJ4917][Lydsy六月份月赛 .A][模拟]Hash Killer IV
- Ubuntu安装jdk7或者jdk8
- 欢迎使用CSDN-markdown编辑器
- Linux shell 经验手册__001__常识
- PAT乙级真题及训练集(15)--1027. 打印沙漏(20)
- 前端学习网站