两个既能收也能发的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客户端进行通信的原理相关推荐

  1. 【Socket网络编程】7.以太网数据包、IP数据包、UDP数据包

    以太网数据包.ip数据包.udp数据包 搭配这篇博文服用,效果更好:数据封装 和 数据拆封:https://blog.csdn.net/u011754972/article/details/11794 ...

  2. Day09: socket网络编程-OSI七层协议,tcp/udp套接字,tcp粘包问题,socketserver

    今日内容:socket网络编程     1.OSI七层协议     2.基于tcp协议的套接字通信     3.模拟ssh远程执行命令     4.tcp的粘包问题及解决方案     5.基于udp协 ...

  3. Windows/Linux TCP Socket网络编程简介及测试代码

    典型的网络应用是由一对程序(即客户程序和服务器程序)组成的,它们位于两个不同的端系统中.当运行这两个程序时,创建了一个客户进程和一个服务器进程,同时它们通过从套接字(socket)读出和写入数据在彼此 ...

  4. Linux C++/Java/Web/OC Socket网络编程

    一,Linux C++ Socket网络编程 1.什么是TCP/IP.UDP? TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控制 ...

  5. Socket网络编程(2)--服务端实现

    中秋了,首先祝大家中秋快乐,闲着无事在家整一个socket的聊天程序,有点仿QQ界面,就是瞎折腾,不知道最后是不是能将所有功能实现. 如果你对socket不了解,请看这篇文章:http://www.c ...

  6. Linux Kernel TCP/IP Stack — Socket Layer — TCP/UDP Socket 网络编程

    目录 文章目录 目录 TCP/UDP Socket 逻辑架构 创建 Socket 绑定 Socket 请求建立 Socket 连接 监听 Socket 接受请求 关闭连接 数据的发送和接收 send ...

  7. Socket网络编程笔记

    网络.计算机网络的构成是什么? 网络: 在计算机领域中,网络是信息传输.接收.共享的虚拟平台,通过它可以把各个点.面(组织之间).体(例如公共app)的信息联系到一起,从而实现这些资源的共享. 局域网 ...

  8. socket网络编程——套接字地址结构

    声明:此博客是本人根据老师课件总结的,如有抄袭行为,本人会即刻删除. 1.主机字节序列和网络字节序列 主机字节序列分为大端字节序和小端字节序,不同的主机采用的字节序列可能不同.大端字节序是指一个整数的 ...

  9. 【网络编程】之四、socket网络编程例解

    前面说了那么多,现在我们给出4个代码+详解,基于win32平台的socket编程.使用TCP 和 UDP 两种协议. OK,先来看一下TCP服务器和客户端: [cpp] view plaincopy ...

最新文章

  1. monkey自定义脚本实践
  2. 《架构漫谈》阅读笔记
  3. 我的Android进阶之旅------gt;Android中MediaRecorder.stop()报错 java.lang.RuntimeException: stop failed....
  4. 求数组最小值及其下标
  5. spring配置详解-三种对象创建方式_
  6. coco2dx c++ HTTP实现
  7. http ,servlet
  8. 通过二进制方式安装innobackupex
  9. DE20 Derivative Formulas
  10. 深度学习2.0-2.tensorflow的基础操作之创建Tensor及应用场景
  11. 循环语句—C#基础回顾
  12. DSP28335串口打印 printf
  13. TortoiseSVN 官网 中文语言包位置
  14. 云计算、计算虚拟化、网络基础简介
  15. 计算机禁止开机自启动,通过禁止开机启动项快速开机,提升电脑流畅度,拒绝自启...
  16. hadoop java 文件追加_HDFS追加文件
  17. 根据代表性序列预测OTU/ASV生活史策略——寡营养型or富营养型
  18. 计算机房电源引入方式,(完整版)通信机房电源计算公式.pdf
  19. 《 自动化测试最佳实践:来自全球的经典自动化测试案例解析》一一2.8 现状...
  20. 批量去除图片的黑色背景,并且统一修改图片尺寸

热门文章

  1. lucene基本原理
  2. k8s architecture
  3. Impala:新一代开源大数据分析引擎--转载
  4. 黑猫315十大行业乱象发布:背后真假套路难辨
  5. SpringBoot Thymeleaf使用教程(实用版)
  6. 谷歌大脑科学家亲解 LSTM:一个关于“遗忘”与“记忆”的故事 本文作者:奕欣 2017-01-14 09:46 导语:AI科技评论保证这是相对通俗易懂的一篇入门介绍了,看不懂的话欢迎关注「AI 科技
  7. 今年美国广告程序化购买支出将超252亿美元
  8. 机器学习之单变量线性回归(Linear Regression with One Variable)
  9. 服务器修改kb,Microsoft KB2344941:操作系统即插即用方式的改变,提高iSCSI Initiator的适应力...
  10. 单片机large模式_对单片机存储分配新的认识