两端口通信TCP服务器(Linux)
来源:互联网 发布:阳江市问政网络平台 编辑:程序博客网 时间:2024/06/15 20:27
//xyt@zhejiang-2017/5#include <stdio.h>#include <stdlib.h>#include <strings.h>#include <sys/types.h>#include <sys/socket.h>#include <memory.h>#include <unistd.h>#include <netinet/in.h>#include <arpa/inet.h>#include <signal.h>#include <pthread.h>#define PORT_111910#define PORT_2 11911#define buflen 1024 //接收缓冲区(KB)#define TIMEOUT 20 //超时自动断开时间(s)#define BACKLOG 1int quit=0;int ok_1=0;int ok_2=0;int client_1,client_2;char rbuffer_1[buflen];char rbuffer_2[buflen];int times=0;char retInfo[10]="quit!\n";pthread_mutex_t mutex;void* runnerSpeaker1(void *param);void* runnerSpeaker2(void *param);void* runnerTimer(void *param);int main(int argc,char *argv[]){pthread_t tid1,tid2,tid3;pthread_attr_t attr;pthread_mutex_init(&mutex,NULL);pthread_attr_init(&attr);pthread_create(&tid1,&attr,runnerSpeaker1,argv[1]); pthread_create(&tid2,&attr,runnerSpeaker2,argv[1]); pthread_create(&tid3,&attr,runnerTimer,argv[1]);pthread_detach(tid1); pthread_detach(tid2); pthread_detach(tid3); while(!quit) { } close(client_1); close(client_2);pthread_mutex_destroy(&mutex); printf("%s",retInfo); return 0;}void* runnerSpeaker1(void *param){int ss;int err;struct sockaddr_in server_addr; //存储服务器端socket地址结构struct sockaddr_in client_addr; //存储客户端 socket地址结构ss = socket(AF_INET,SOCK_STREAM,0); //建立一个序列化的,可靠的,双向连接的的字节流memset(&server_addr,0,sizeof(server_addr));server_addr.sin_family = AF_INET; //协议族server_addr.sin_addr.s_addr = htonl(INADDR_ANY); //本地地址server_addr.sin_port = htons(PORT_1);int opt=1;setsockopt(ss,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(&opt));//自动释放端口err = bind(ss,(struct sockaddr *)&server_addr,sizeof(sockaddr));if(err<0){printf("server : bind error\n");quit=1;pthread_exit(0);}err = listen(ss,BACKLOG); //设置监听的队列大小if(err < 0){printf("server : listen error\n");quit=1;pthread_exit(0);}for(;;){socklen_t addrlen = sizeof(client_addr);client_1 = accept(ss,(struct sockaddr *)&client_addr,&addrlen); //注,此处为了获取返回值使用 指针做参数if(client_1 < 0) //出错{quit=1; //结束此次循环}else{printf("1:connected\n");ok_1=1;while(!ok_2);}for(;;){close(ss); int size;memset(rbuffer_1,0,buflen); for(size = 0;size == 0 ;size = read(client_1,rbuffer_1,buflen)); pthread_mutex_lock(&mutex); times=0; pthread_mutex_unlock(&mutex); printf("1:%d Byte\n",size);write(client_2,rbuffer_1,strlen(rbuffer_1)+1); if(strcmp(rbuffer_1,"quit") == 0) { quit=1; }}}}void* runnerSpeaker2(void *param){int ss;int err;struct sockaddr_in server_addr; //存储服务器端socket地址结构struct sockaddr_in client_addr; //存储客户端 socket地址结构ss = socket(AF_INET,SOCK_STREAM,0); //建立一个序列化的,可靠的,双向连接的的字节流memset(&server_addr,0,sizeof(server_addr));server_addr.sin_family = AF_INET; //协议族server_addr.sin_addr.s_addr = htonl(INADDR_ANY); //本地地址server_addr.sin_port = htons(PORT_2);int opt=1;setsockopt(ss,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(&opt));//自动释放端口err = bind(ss,(struct sockaddr *)&server_addr,sizeof(sockaddr));if(err<0){printf("server : bind error\n");quit=1;pthread_exit(0);}err = listen(ss,BACKLOG); //设置监听的队列大小if(err < 0){printf("server : listen error\n");quit=1;pthread_exit(0);}for(;;){socklen_t addrlen = sizeof(client_addr);client_2 = accept(ss,(struct sockaddr *)&client_addr,&addrlen); //注,此处为了获取返回值使用 指针做参数if(client_2 < 0) //出错{quit=1; //结束此次循环}else{printf("2:connected\n");ok_2=1;while(!ok_1);}for(;;){close(ss); int size;memset(rbuffer_2,0,buflen); for(size = 0;size == 0 ;size = read(client_2,rbuffer_2,buflen)); pthread_mutex_lock(&mutex); times=0; pthread_mutex_unlock(&mutex); printf("2:%d Byte\n",size);write(client_1,rbuffer_2,strlen(rbuffer_2)+1); if(strcmp(rbuffer_2,"quit") == 0) {quit=1; }}}}void* runnerTimer(void *param){ while(1) { if(ok_1&&ok_2) { pthread_mutex_lock(&mutex); times++; pthread_mutex_unlock(&mutex); if(times>TIMEOUT) { sprintf(retInfo,"timeout!\n"); quit=1; } } sleep(1); }}
阅读全文
0 0
- 两端口通信TCP服务器(Linux)
- Linux TCP 服务器编程(五):端口重用及TIME_WAIT
- TCP服务器通信
- linux中客户服务器通信程序(TCP)
- linux 服务器/客户端 tcp通信的简单例子
- Linux C——TCP客户端服务器通信
- Linux C TCP Socket实现客户与服务器简单通信
- Linux C TCP Socket实现客户与服务器简单通信
- LINUX下如何创建TCP客户端和服务器,实现通信
- 两台Linux主机通信(服务器客户端搭建)
- OSI参考模型----TCP协议及端口----客户/服务器通信模式
- TCP 完成端口服务器构建
- TCP完成端口服务器构建
- linux 驱动程序 端口通信
- Linux Socket TCP通信
- linux TCP socket 通信
- Linux中的TCP通信
- linux Tcp 通信socket
- PyTorch学习3—神经网络
- python:12306余票爬虫
- SVM支持向量机
- 学习C语言的第2天
- 伯克利大学数据库作业实现SimpleDB
- 两端口通信TCP服务器(Linux)
- 线性神经网络
- Picker mk
- C/C++语言调用lua函数和编译问题
- 键盘虚拟码
- 107. Binary Tree Level Order Traversal II(BFS)
- 排序算法Day1
- hdu3450 Counting Sequences(dp+离散化+树状数组优化)
- UVA