linux的tcp非阻塞客户端与服务端demo源码
客户端#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <sys/socket.h>
#include <resolv.h>
#include <stdlib.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <sys/time.h>
#include <sys/types.h> #define MAXBUF 1024
#define PORT 8888
int main(int argc, char **argv)
{ int sockfd, len; struct sockaddr_in dest; char buf[MAXBUF + 1]; fd_set rfds,wfds; struct timeval tv; int retval, maxfd = -1; char sendbuf[128]="helloworld";if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { perror("Socket"); exit(errno); } char *seraddr="192.168.0.224";bzero(&dest, sizeof(dest)); dest.sin_family = AF_INET; dest.sin_port = htons(PORT); if (inet_aton(seraddr, (struct in_addr *) &dest.sin_addr.s_addr) == 0) { perror(seraddr); exit(errno); } if(connect(sockfd, (struct sockaddr *) &dest, sizeof(dest)) != 0) { perror("Connect "); exit(errno); } printf("connect to server...\n"); while (1) { FD_ZERO(&rfds); FD_SET(sockfd, &rfds); FD_ZERO(&wfds); FD_SET(sockfd, &wfds); maxfd = 0; //FD_SET(sockfd, &rfds); if (sockfd > maxfd) maxfd = sockfd; tv.tv_sec = 1; tv.tv_usec = 0; retval = select(maxfd + 1, &rfds, &wfds, NULL, &tv); if (retval == -1) { printf("select error! %s", strerror(errno)); break; } else if (retval == 0) { continue; } else { if (FD_ISSET(sockfd, &wfds)) { //bzero(buf, MAXBUF + 1); len = send(sockfd, sendbuf, strlen(sendbuf), 0); if (len > 0) printf("msg:%s send successful,totalbytes: %d!\n", sendbuf, len); else { printf("msg:'%s failed!\n", sendbuf); break; } } if(FD_ISSET(sockfd, &rfds)) { bzero(buf, MAXBUF + 1); len = recv(sockfd, buf, MAXBUF, 0); if (len > 0) printf("recv:'%s, total: %d \n", buf, len); else { if (len < 0) printf("recv failed!errno:%d,error msg: '%s'\n", errno, strerror(errno)); else printf("other exit,terminal chat\n"); break; } } } sleep(1);} close(sockfd); return 0;
} 服务端
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/wait.h>
#include <sys/time.h>
#include <sys/types.h> #define MAXBUF 1024 typedef struct CLIENT { int fd; struct sockaddr_in addr;
}CLIENT; /***************************
**server for multi-client
**PF_SETSIZE=1024
****************************/
int main(int argc, char** argv)
{ int i,n,maxi = -1; int j=0;int nready; int slisten,sockfd,maxfd=-1,connectfd;int maxifd=-1;int sendn=-1;char sendbuf[100]="helloworld";unsigned int myport,lisnum; CLIENT client[FD_SETSIZE]; struct sockaddr_in my_addr,addr; struct timeval tv; socklen_t len; fd_set rset,allset,wset; char buf[MAXBUF + 1]; myport = 8883; lisnum = 5; if((slisten = socket(AF_INET,SOCK_STREAM,0)) == -1) { perror("socket"); exit(1); } bzero(&my_addr,sizeof(my_addr)); my_addr.sin_family = AF_INET; my_addr.sin_port = htons(myport); my_addr.sin_addr.s_addr = INADDR_ANY; char snd_buf[128]="helloworld";if(bind(slisten, (struct sockaddr *)&my_addr, sizeof(my_addr)) == -1) { perror("bind"); exit(1); } if (listen(slisten, lisnum) == -1) { perror("listen"); exit(1); } for(i=0;i<5;i++) { client[i].fd = -1; } printf("Waiting for connections and data...\n");while (1) { tv.tv_sec = 1; tv.tv_usec = 0;FD_ZERO(&allset); FD_SET(slisten, &allset); maxfd = slisten; if(select(maxfd+1,&allset,NULL,NULL,&tv)>0){len = sizeof(struct sockaddr); if((connectfd = accept(slisten,(struct sockaddr*)&addr,&len)) == -1) { perror("accept() error\n"); }for(i=0;i<5;i++){if(client[i].fd<0){client[i].fd=connectfd;break;}}if(i==5){printf("too many connect\n");}}for(j=0;j<5;j++){if(client[j].fd<0)continue;FD_ZERO(&rset);FD_SET(client[j].fd,&rset);FD_ZERO(&wset);FD_SET(client[j].fd,&wset); maxifd = client[j].fd; if(select(maxifd + 1, &rset,&wset, NULL, &tv)>0){if(FD_ISSET(client[j].fd,&rset)) { bzero(buf,MAXBUF + 1); if((n = recv(client[j].fd,buf,MAXBUF,0)) > 0) { printf("received data:%s \n",buf); } }if(FD_ISSET(client[j].fd,&wset)){n = send(client[j].fd,snd_buf,128,0) > 0 ;}}} sleep(1);} close(slisten);
}
linux的tcp非阻塞客户端与服务端demo源码相关推荐
- java 网络编程(二) tcp传输实现客户端和服务端进行信息交流
1.使用Tcp从一台电脑往另一台电脑上发送文本数据 客户端: import java.io.*; import java.net.*; /**** 客户端,* 通过查阅socket对象,发现在该对象建 ...
- php手游服务端开发教程,【手游服务端】梦想海贼王 卡牌系列一键端服务端游戏源码+教程...
[手游服务端]梦想海贼王 卡牌系列一键端服务端游戏源码+教程 游戏介绍: <梦想海贼王>是一款卡牌类手游,游戏以全球第一超人气动漫<海贼王>为题材,用Q版风格配合新奇多样的玩法 ...
- java开源即时通讯软件服务端openfire源码构建
java开源即时通讯软件服务端openfire源码构建 本文使用最新的openfire主干代码为例,讲解了如何搭建一个openfire开源开发环境,正在实现自己写java聊天软件: 编译环境搭建 调试 ...
- C++RTSP服务端(附源码)
VC++开发常用功能一系列文章 (欢迎订阅,持续更新...) 第16章:VC++ RTSP服务端(附源码) 源代码demo已上传到百度网盘:永久生效 ,文章尾部附 百度链接
- JAVA毕业设计Vue.js网上书城管理系统设计与实现服务端计算机源码+lw文档+系统+调试部署+数据库
JAVA毕业设计Vue.js网上书城管理系统设计与实现服务端计算机源码+lw文档+系统+调试部署+数据库 JAVA毕业设计Vue.js网上书城管理系统设计与实现服务端计算机源码+lw文档+系统+调试部 ...
- tcp网络编程客户端和服务端及listen和tcp允许最大连接数
tcp网络编程 tcp网络编程步骤: 由于tcp传输特点是可靠有连接,那么就有 1.客户端向服务端发送连接请求(SYN), 2.服务端接受请求并向客户端发送(SYN+ACK); 3.客户端向服务端回复 ...
- 【学习笔记】在windows下进行基于TCP的本地客户端和服务端socket通信
文章目录 socket介绍 java中使用socket 基于tcp的socket通信 使用ServerSocket类创建一个web服务器:(java) windows下的基于tcp的socket编程( ...
- winserver的consul部署实践与.net core客户端使用(附demo源码)
前言 随着微服务兴起,服务的管理显得极其重要.都知道微服务就是"拆",把臃肿的单块应用,拆分成多个轻量级的服务,每个服务可以在短周期内重构.迭代.交付.随着微服务的数量增多,因量变 ...
- 客户连接多个服务端_Dubbo源码解析之客户端Consumer
前面我们学习了Dubbo源码解析之服务端Provider.对服务提供方进行思路上的讲解,我们知道以下知识点.本篇文章主要对消费方进行讲解.废话不多说请看下文. 如何将对象方法生成Invoker 如何将 ...
最新文章
- 教你打造优秀IT博文
- myeclipse 8.5 常用快捷键
- Springmvc整合mybatis
- Mysql时间数据分段累加求和案例之子查询与SUM窗口函数
- RabbitMq(十五)消息的追踪查看配置及查看方法
- SpringBoot和监控管理
- mysql+同步大师,mysql同步异常 - 低调的糊涂虫的个人页面 - OSCHINA - 中文开源技术交流社区...
- centos(redhat)用户和组的配置
- 动态绑定OnClientClick的值
- Codeforces Round#767(Div.2) F1. Game on Sum (Easy Version)
- Android基础入门教程——9.2 MediaPlayer播放音频与视频
- ASP.NET4.0尚未在Web服务器上注册
- 去湘菜馆,该不该来壶酸梅汁?
- Oracle查询列重命名问题
- 关于cmake与make
- php获取微博热搜,爬取微博热搜top50(示例代码)
- Linux下Apache服务的部署和配置
- BOJ 427. 学姐逗学弟
- 嵌入式C语言强化学习——(嵌入式学习路线1)
- qcc512x qcc302x qcc303x earbud 环境搭建、使用例程
热门文章
- java 求最小公倍数详解
- idea2019 marketplace无法连接网络
- Unity(新机)安装失败解决办法
- python在Nuke中的应用(一)
- 宝可计算机怎么弹音乐,儿童玩具电子琴怎么弹音乐
- php网页打印框架,简单打印【Release】 - HisiPHP基于ThinkPHP和Layui开发的通用后台管理框架...
- 2015年计算机模块在线,2015年职称计算机考试模块..doc
- 一个关于未来十年的预言
- 大一期中c语言答案,C语言期中考试题目及答案
- y的根号x怎么在计算机里输入,x的平方怎么在电脑上打出来(常见数学符号打法图文)...