客户端#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源码相关推荐

  1. java 网络编程(二) tcp传输实现客户端和服务端进行信息交流

    1.使用Tcp从一台电脑往另一台电脑上发送文本数据 客户端: import java.io.*; import java.net.*; /**** 客户端,* 通过查阅socket对象,发现在该对象建 ...

  2. php手游服务端开发教程,【手游服务端】梦想海贼王 卡牌系列一键端服务端游戏源码+教程...

    [手游服务端]梦想海贼王 卡牌系列一键端服务端游戏源码+教程 游戏介绍: <梦想海贼王>是一款卡牌类手游,游戏以全球第一超人气动漫<海贼王>为题材,用Q版风格配合新奇多样的玩法 ...

  3. java开源即时通讯软件服务端openfire源码构建

    java开源即时通讯软件服务端openfire源码构建 本文使用最新的openfire主干代码为例,讲解了如何搭建一个openfire开源开发环境,正在实现自己写java聊天软件: 编译环境搭建 调试 ...

  4. C++RTSP服务端(附源码)

      VC++开发常用功能一系列文章 (欢迎订阅,持续更新...) 第16章:VC++ RTSP服务端(附源码)  源代码demo已上传到百度网盘:永久生效 ,文章尾部附 百度链接

  5. JAVA毕业设计Vue.js网上书城管理系统设计与实现服务端计算机源码+lw文档+系统+调试部署+数据库

    JAVA毕业设计Vue.js网上书城管理系统设计与实现服务端计算机源码+lw文档+系统+调试部署+数据库 JAVA毕业设计Vue.js网上书城管理系统设计与实现服务端计算机源码+lw文档+系统+调试部 ...

  6. tcp网络编程客户端和服务端及listen和tcp允许最大连接数

    tcp网络编程 tcp网络编程步骤: 由于tcp传输特点是可靠有连接,那么就有 1.客户端向服务端发送连接请求(SYN), 2.服务端接受请求并向客户端发送(SYN+ACK); 3.客户端向服务端回复 ...

  7. 【学习笔记】在windows下进行基于TCP的本地客户端和服务端socket通信

    文章目录 socket介绍 java中使用socket 基于tcp的socket通信 使用ServerSocket类创建一个web服务器:(java) windows下的基于tcp的socket编程( ...

  8. winserver的consul部署实践与.net core客户端使用(附demo源码)

    前言 随着微服务兴起,服务的管理显得极其重要.都知道微服务就是"拆",把臃肿的单块应用,拆分成多个轻量级的服务,每个服务可以在短周期内重构.迭代.交付.随着微服务的数量增多,因量变 ...

  9. 客户连接多个服务端_Dubbo源码解析之客户端Consumer

    前面我们学习了Dubbo源码解析之服务端Provider.对服务提供方进行思路上的讲解,我们知道以下知识点.本篇文章主要对消费方进行讲解.废话不多说请看下文. 如何将对象方法生成Invoker 如何将 ...

最新文章

  1. 教你打造优秀IT博文
  2. myeclipse 8.5 常用快捷键
  3. Springmvc整合mybatis
  4. Mysql时间数据分段累加求和案例之子查询与SUM窗口函数
  5. RabbitMq(十五)消息的追踪查看配置及查看方法
  6. SpringBoot和监控管理
  7. mysql+同步大师,mysql同步异常 - 低调的糊涂虫的个人页面 - OSCHINA - 中文开源技术交流社区...
  8. centos(redhat)用户和组的配置
  9. 动态绑定OnClientClick的值
  10. Codeforces Round#767(Div.2) F1. Game on Sum (Easy Version)
  11. Android基础入门教程——9.2 MediaPlayer播放音频与视频
  12. ASP.NET4.0尚未在Web服务器上注册
  13. 去湘菜馆,该不该来壶酸梅汁?
  14. Oracle查询列重命名问题
  15. 关于cmake与make
  16. php获取微博热搜,爬取微博热搜top50(示例代码)
  17. Linux下Apache服务的部署和配置
  18. BOJ 427. 学姐逗学弟
  19. 嵌入式C语言强化学习——(嵌入式学习路线1)
  20. qcc512x qcc302x qcc303x earbud 环境搭建、使用例程

热门文章

  1. java 求最小公倍数详解
  2. idea2019 marketplace无法连接网络
  3. Unity(新机)安装失败解决办法
  4. python在Nuke中的应用(一)
  5. 宝可计算机怎么弹音乐,儿童玩具电子琴怎么弹音乐
  6. php网页打印框架,简单打印【Release】 - HisiPHP基于ThinkPHP和Layui开发的通用后台管理框架...
  7. 2015年计算机模块在线,2015年职称计算机考试模块..doc
  8. 一个关于未来十年的预言
  9. 大一期中c语言答案,C语言期中考试题目及答案
  10. y的根号x怎么在计算机里输入,x的平方怎么在电脑上打出来(常见数学符号打法图文)...