服务端

#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<assert.h>
#include<stdio.h>
#include<unistd.h>
#include<errno.h>
#include<string.h>
#include<fcntl.h>
#include<stdlib.h>
int main(void){int ret = 0;struct sockaddr_in address;bzero(&address,sizeof(address));address.sin_family = AF_INET;address.sin_addr.s_addr = INADDR_ANY;address.sin_port = htons(9999);int listenfd = socket(AF_INET,SOCK_STREAM,0);if(listenfd == -1){perror("socket");return -1;}ret = bind(listenfd,(struct sockaddr*)&address,sizeof(address));if(ret == -1){perror("bind");return -1;}ret = listen(listenfd,5);if(ret == -1){perror("listen");return -1;}struct sockaddr_in client_address;socklen_t client_addrlength = sizeof(client_address);int connfd = accept(listenfd,(struct sockaddr*)&client_address,&client_addrlength);if(connfd == -1){perror("connect");close(listenfd);}char buf[1024];fd_set read_fds;fd_set exception_fds;FD_ZERO(&read_fds);FD_ZERO(&exception_fds);while(1){memset(buf,'\0',sizeof(buf));FD_SET(connfd,&read_fds);FD_SET(connfd,&exception_fds);ret = select(connfd+1,&read_fds,NULL,&exception_fds,NULL);if(ret == -1){perror("select");break;}if(FD_ISSET(connfd,&read_fds)){ret = recv(connfd,buf,sizeof(buf)-1,0);if(ret == -1){perror("recv1");break;}printf("get %d bytes of normal data :%s \n",ret,buf);}else if(FD_ISSET(connfd,&exception_fds)){//对于同一个连接这里加了else带外数据读不出来//或许对于不同的连接,带外数据或者读的出来ret = recv(connfd,buf,sizeof(buf)-1,MSG_OOB);if(ret == -1){perror("recv2");break;}printf("get %d bytes of oob data :%s \n",ret,buf);}}close(connfd);close(listenfd);return 0;
}

客户端

#include<stdio.h>
#include<arpa/inet.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>int main(void){//1.创建套接字int fd = socket(AF_INET,SOCK_STREAM,0);if(fd == -1){perror("socket");exit(0);}//2.连接服务器端struct sockaddr_in serveraddr;serveraddr.sin_family = AF_INET;inet_pton(AF_INET,"192.168.131.138",&serveraddr.sin_addr.s_addr);serveraddr.sin_port = htons(9999);int ret = connect(fd,(struct sockaddr*)&serveraddr,sizeof(serveraddr));if(ret == -1){perror("connect");exit(0);}//3.通信const char*oob_data = "abc";const char*normal_data = "123";send(fd,normal_data,strlen(normal_data),0);send(fd,oob_data,strlen(oob_data),MSG_OOB);send(fd,normal_data,strlen(normal_data),0);close(fd);getchar();return 0;
}

服务端程序运行结果

2022-4-19 同时读取带外数据和正常数据《Linux高性能服务器》笔记相关推荐

  1. Python+pywin32批量读取带密码的Excel文件数据导出为CSV文件

    好消息:"Python小屋"编程比赛正式开始 推荐图书: <Python程序设计(第3版)>,(ISBN:978-7-302-55083-9),董付国,清华大学出版社, ...

  2. TCP协议--带外数据和超时重传

    <Linux高性能服务器编程>阅读笔记: 1. 带外数据   有些传输层协议具有带外(Out Of Band, OOB)数据的概念,用于迅速告知对方本端发生的重要事件.因此带外数据比普通数 ...

  3. Linux服务器编程 用SIGURG检测带外数据是否到达

    带外数据 带外数据用于迅速告知对方本端发生的重要的事件.它比普通的数据(带内数据)拥有更高的优先级,不论发送缓冲区中是否有排队等待发送的数据,它总是被立即发送.带外数据的传输可以使用一条独立的传输层连 ...

  4. 什么是带内管理 带外管理?(转)

    什么叫带外管理? 常见的设备管理方式有SNMP.RMON.Web.TELNET以及通过CONSOLE.AUX接口管理,有些高端设备还具备100BASE-TX的带外管理端口. 我在网上查到大概SNMP. ...

  5. hp服务器重置bmc,服务器BMC(带外)

    服务器除了装linux,windows系统外,相应还有一个可通过网线(服务器默认带外地址--可改)连接具体厂商服务器的BMC(Baseboard Management Controller,基板管理控 ...

  6. 网络稳定的第二道屏障: 带外网络DHCP异常排查方案

    简介: 网络管理通常可分为带外管理(out-of-band)和带内管理(in-band)两种管理模式,带外网络是通过独立于数据网络之外的专用管理通道对机房网络设备(路由器.交换机.防火墙等).服务器设 ...

  7. 带外管理和带外管理的区别

    带外网管是指通过专门的网管通道实现对网络的管理,将网管数据与业务数据分开,为网管数据建立独立通道.在这个通道中,只传输管理数据.统计信息.计费信息等,网管数据与业务数据分离,可以提高网管的效率与可靠性 ...

  8. 什么是带内管理 带外管理

    什么叫带外管理? 常见的设备管理方式有SNMP.RMON.Web.TELNET以及通过CONSOLE.AUX接口管理,有些高端设备还具备100BASE-TX的带外管理端口. 我在网上查到大概SNMP. ...

  9. 曙光服务器I840-G25带外管理

    曙光服务器一般出厂时默认不配置固定带外管理IP,但同时打开了另一扇DHCP的窗.因此,只需要给已经处于开机状态的服务器配置一个DHCP服务器,使其能够自动获取IP,就可以实现带外管理功能. I840- ...

最新文章

  1. pandas中align函数的使用示例
  2. SQL查询从多个表返回数据
  3. 本地win7ping VM linux ipv6地址问题
  4. SqlServer 2008 R2定时备份数据库,并且发送邮件通知
  5. HBuilderX代码设置断点或者书签
  6. sql 返回日期的年月部分_公示|2020年11月部分志愿活动名单公示
  7. 2.6 动量梯度下降法
  8. 七个办法只有一个有效:200 PORT command successful. Consider using PASV.425 Failed to establish connection.
  9. Android设置Textview字体样式
  10. 论文查重没通过怎么办?
  11. 微博之争,没有硝烟的互联网战争
  12. 同侪隐修录 (2016-12-25 23:10:21)转载▼
  13. win7系统如何添加打印机服务器,怎样如何添加打印机驱动步骤
  14. 前端需要了解的5G网络知识
  15. Ubuntu图形界面升级方法
  16. python函数是一段具有特定功能的语句组_超星《用相声演绎中国文化》网课答案...
  17. html布局间距,CSS Grid布局:列和间距
  18. 使用Vlookup筛选数据
  19. 关注新技术,打破自满
  20. is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto

热门文章

  1. access数据类型整型怎么设置_access 2010工提供了几种数据类型?
  2. 【python】批量导出IEEE的文献信息为段落文本
  3. C语言实现TCP连接
  4. C语言实现:见缝插针游戏!代码思路+源码分享
  5. 曝滴滴外卖于4月1日上线;联想回应摩托罗拉手机裁员;苹果拟推廉价版iPhone X丨价值早报
  6. gcc -fstack protector 原理
  7. 思维导图推荐软件有哪些?这两个思维导图软件你值得拥有
  8. 使用luastudio,调试 lua配置
  9. Leaning How to learn
  10. 广数工业机器人五点法_广数工业机器人制造项目二期建设即将完成,年产逾千台 - 市场新闻 - 产业资讯 -新战略机器人产业研究院 -新战略机器人网-工业、服务、AGV机器人产业资讯传播者...