一端口发送一端口接收socket编程
来源:互联网 发布:linux禁用用户怎么做 编辑:程序博客网 时间:2024/06/12 21:13
#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_IN11910#define PORT_OUT11911#define BACKLOG 3#define buflen 1024int quit=0;int inisok=0;int outisok=0;char rbuffer[buflen];char buffer[buflen];char wbuffer[buflen];pthread_mutex_t mutex;void* runnerIn(void *param);void* runnerOut(void *param);int main(int argc,char *argv[]){pthread_t tid1,tid2;pthread_attr_t attr;pthread_mutex_init(&mutex,NULL);pthread_attr_init(&attr);pthread_create(&tid1,&attr,runnerIn,argv[1]); pthread_create(&tid2,&attr,runnerOut,argv[1]);pthread_join(tid1,NULL);pthread_join(tid2,NULL);pthread_mutex_destroy(&mutex);printf("quit!\n");}void* runnerIn(void *param){int ss,sc;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_IN);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");pthread_exit(0);}err = listen(ss,BACKLOG); //设置监听的队列大小if(err < 0){printf("server : listen error\n");pthread_exit(0);}for(;;){socklen_t addrlen = sizeof(client_addr);sc = accept(ss,(struct sockaddr *)&client_addr,&addrlen); //注,此处为了获取返回值使用 指针做参数if(sc < 0) //出错{continue; //结束此次循环}else{printf("IN:connected\n");inisok=1;while(!outisok);}for(;;){close(ss);int size;memset(rbuffer,0,buflen);for(size = 0;size == 0 ;size = read(sc,rbuffer,buflen));printf("%s\n",rbuffer);pthread_mutex_lock(&mutex);for(int i=0;i<buflen;i++){buffer[i]=rbuffer[i];}pthread_mutex_unlock(&mutex);if(strcmp(rbuffer,"quit") == 0) {close(sc);quit=1; pthread_exit(0); }}}}void* runnerOut(void *param){int ss,sc;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_OUT);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");pthread_exit(0);}err = listen(ss,BACKLOG); //设置监听的队列大小if(err < 0){printf("server : listen error\n");pthread_exit(0);}for(;;){socklen_t addrlen = sizeof(client_addr);sc = accept(ss,(struct sockaddr *)&client_addr,&addrlen); //注,此处为了获取返回值使用 指针做参数if(sc < 0) //出错{continue; //结束此次循环}else{printf("OUT:connected\n");outisok=1;while(!inisok);}for(;;){close(ss);int size;memset(wbuffer,0,buflen);sleep(1);pthread_mutex_lock(&mutex);write(sc,buffer,strlen(buffer)+1);pthread_mutex_unlock(&mutex);if(strcmp(rbuffer,"quit") == 0) {close(sc);quit=1; pthread_exit(0); }}}}
阅读全文
0 0
- 一端口发送一端口接收socket编程
- BizTalk Server 基于消息的基本数据交换(一) - 发送端口直接订阅接收端口
- 一端口如何区分不同的Socket .
- socket 编程入门教程(一)TCP server 端:7、接收与发送
- socket 编程入门教程(一)TCP server 端:7、接收与发送
- BizTalk:使用ExplorerOM创建MSMQ发送端口和接收端口
- socket编程--完成端口模型
- 网络 socket 编程 端口 大全
- 网络编程一:概述、网络模型、TCP\UDP、Socket套接字、UDP发送和接收、UDP聊、阻塞式方法
- webservice向指定socket端口发送消息
- .net socket与完成端口、异步发送
- Socket编程之UDP发送、接收编程
- Winsock完成端口编程与应用(一)(转载)
- TCP发送接收数据(一)
- 端口,socket
- LWIP UDP socket编程 可以指定本地端口号及发送长度不能太长问题分析
- LWIP UDP socket编程 可以指定本地端口号及发送长度不能太长问题分析
- 安卓socket聊天,端口被占用问题(附:socket聊天代码)(一)
- Qt使用QuaZip对文件进行压缩解压操作
- 补墙
- Oracle---逻辑备份
- Qt 学习之路 2(65):访问网络(1)
- 请输入一个数,计算其二进制中1的个数
- 一端口发送一端口接收socket编程
- codeforces 868C
- &(与运算)、|(或运算)、^(异或运算)的本质理解
- Linux的常用指令(一)
- Oracle PL/SQL小练习
- 树形DP 总结
- 变量、数据与数组操作
- $.Deferred()的promise()方法-学习笔记
- 数据结构——第四讲、树(中)(2)