【Socket网络编程】6.两个既能收也能发的udp客户端进行通信的原理
两个既能收也能发的udp客户端进行通信的原理
发送数据时可能会用到INADDR_BROADCAST
代表255.255.255.255
的广播地址,作用范围只能在当前局域网。
接收数据可能会用到INADDR_ANY
,它是在socket
绑定bind()
时使用了,会监听本机所有网卡的ip。
本机socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)
创建套接字后,只赋予其所使用的协议为udp、数据报,并未分配地址。
接着setsockopt(fd, SOL_SOCKET, SO_BROADCAST, reinterpret_cast<char*>(&opt),sizeof(opt))
设置为广播。
本机可能有多个网卡多个ip,所以每次都通过bind()
绑定INADDR_ANY
监听本机所有网卡ip,最后本机会有一个网卡ip收到收到对方的udp消息。
若对方先局域网广播,我们这边会监听所有网卡ip,会收到他消息,得到对方的ip。然后我们进行单播发送数据给对方ip。
对方也会收到我们的消息,得到我们的ip信息,然后单播发送给我们这个ip。(他也可以不单播给我们,比如他一直广播给局域网)。
当我们连续十次接收的消息不是我们想要的数据,那么我们就改为广播发送给局域网。
mdc的v2x节点 和 obu的节点就是这种方式.
【Socket网络编程】6.两个既能收也能发的udp客户端进行通信的原理相关推荐
- 【Socket网络编程】7.以太网数据包、IP数据包、UDP数据包
以太网数据包.ip数据包.udp数据包 搭配这篇博文服用,效果更好:数据封装 和 数据拆封:https://blog.csdn.net/u011754972/article/details/11794 ...
- Day09: socket网络编程-OSI七层协议,tcp/udp套接字,tcp粘包问题,socketserver
今日内容:socket网络编程 1.OSI七层协议 2.基于tcp协议的套接字通信 3.模拟ssh远程执行命令 4.tcp的粘包问题及解决方案 5.基于udp协 ...
- Windows/Linux TCP Socket网络编程简介及测试代码
典型的网络应用是由一对程序(即客户程序和服务器程序)组成的,它们位于两个不同的端系统中.当运行这两个程序时,创建了一个客户进程和一个服务器进程,同时它们通过从套接字(socket)读出和写入数据在彼此 ...
- Linux C++/Java/Web/OC Socket网络编程
一,Linux C++ Socket网络编程 1.什么是TCP/IP.UDP? TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控制 ...
- Socket网络编程(2)--服务端实现
中秋了,首先祝大家中秋快乐,闲着无事在家整一个socket的聊天程序,有点仿QQ界面,就是瞎折腾,不知道最后是不是能将所有功能实现. 如果你对socket不了解,请看这篇文章:http://www.c ...
- Linux Kernel TCP/IP Stack — Socket Layer — TCP/UDP Socket 网络编程
目录 文章目录 目录 TCP/UDP Socket 逻辑架构 创建 Socket 绑定 Socket 请求建立 Socket 连接 监听 Socket 接受请求 关闭连接 数据的发送和接收 send ...
- Socket网络编程笔记
网络.计算机网络的构成是什么? 网络: 在计算机领域中,网络是信息传输.接收.共享的虚拟平台,通过它可以把各个点.面(组织之间).体(例如公共app)的信息联系到一起,从而实现这些资源的共享. 局域网 ...
- socket网络编程——套接字地址结构
声明:此博客是本人根据老师课件总结的,如有抄袭行为,本人会即刻删除. 1.主机字节序列和网络字节序列 主机字节序列分为大端字节序和小端字节序,不同的主机采用的字节序列可能不同.大端字节序是指一个整数的 ...
- 【网络编程】之四、socket网络编程例解
前面说了那么多,现在我们给出4个代码+详解,基于win32平台的socket编程.使用TCP 和 UDP 两种协议. OK,先来看一下TCP服务器和客户端: [cpp] view plaincopy ...
最新文章
- monkey自定义脚本实践
- 《架构漫谈》阅读笔记
- 我的Android进阶之旅------gt;Android中MediaRecorder.stop()报错 java.lang.RuntimeException: stop failed....
- 求数组最小值及其下标
- spring配置详解-三种对象创建方式_
- coco2dx c++ HTTP实现
- http ,servlet
- 通过二进制方式安装innobackupex
- DE20 Derivative Formulas
- 深度学习2.0-2.tensorflow的基础操作之创建Tensor及应用场景
- 循环语句—C#基础回顾
- DSP28335串口打印 printf
- TortoiseSVN 官网 中文语言包位置
- 云计算、计算虚拟化、网络基础简介
- 计算机禁止开机自启动,通过禁止开机启动项快速开机,提升电脑流畅度,拒绝自启...
- hadoop java 文件追加_HDFS追加文件
- 根据代表性序列预测OTU/ASV生活史策略——寡营养型or富营养型
- 计算机房电源引入方式,(完整版)通信机房电源计算公式.pdf
- 《 自动化测试最佳实践:来自全球的经典自动化测试案例解析》一一2.8 现状...
- 批量去除图片的黑色背景,并且统一修改图片尺寸
热门文章
- lucene基本原理
- k8s architecture
- Impala:新一代开源大数据分析引擎--转载
- 黑猫315十大行业乱象发布:背后真假套路难辨
- SpringBoot Thymeleaf使用教程(实用版)
- 谷歌大脑科学家亲解 LSTM:一个关于“遗忘”与“记忆”的故事 本文作者:奕欣	2017-01-14 09:46 导语:AI科技评论保证这是相对通俗易懂的一篇入门介绍了,看不懂的话欢迎关注「AI 科技
- 今年美国广告程序化购买支出将超252亿美元
- 机器学习之单变量线性回归(Linear Regression with One Variable)
- 服务器修改kb,Microsoft KB2344941:操作系统即插即用方式的改变,提高iSCSI Initiator的适应力...
- 单片机large模式_对单片机存储分配新的认识