c实现 udp通信

2023-05-16

1.创建对象

int udp_socket = socket(AF_INET,SOCK_DGRAM,0);

AF_INET    网络通信协议

SOCK_DGRAM  传输协议

属性默认 0

2.想接收信息就需要绑定地址信息

struct sockaddr_in server_addr ;
server_addr . sin_family = AF_INET ;
server_addr . sin_port = htons ( 端口 ); //自选
server_addr . sin_addr . s_addr = INADDR_ANY ; //
有网卡地址
bind ( udp_socket , ( struct sockaddr * ) & server_addr sizeof ( server_addr ));
3.接收信息

  struct sockaddr_in clien_addr; //可以获取发送端信息

 int len=sizeof(clien_addr);

recvfrom(udp_socket,buf,1024,0,(struct sockaddr *)&clien_addr,&len);

如不需要获取发送端信息就

recvfrom(udp_socket,buf,1024,0,NULL,NULL);

4.发送信息

(需要接收端的信息才能发送,设置发送结构体)

        struct sockaddr_in dest_addr;

        dest_addr.sin_family = AF_INET;

        dest_addr.sin_port   = htons(3021);

        dest_addr.sin_addr.s_addr = INADDR_ANY; //或 inet_addr("192.168.64.183") 根据具体网址

        sendto(udp_socket,buf,strlen(buf),0,(struct sockaddr *)&dest_addr,sizeof(dest_addr));

5.关闭

close(udp_socket);

udp 开启组播

(组播相当于开启群聊)

1.创建对象

int udp_socket = socket ( AF_INET , SOCK_DGRAM , 0 );
2.绑定对象
struct sockaddr_in server_addr ;
server_addr . sin_family = AF_INET ;
server_addr . sin_port = htons ( 端口 );
server_addr . sin_addr . s_addr = INADDR_ANY ; // 所 有网卡地址
bind ( udp_socket ,( struct sockaddr * ) & server_addr , sizeof ( server_addr ));
3.加入组播

    struct ip_mreq a;  //组播结构体  

    bzero(&a, sizeof(a));

    a.imr_interface.s_addr = INADDR_ANY; //所有网卡地址加入组播

    a.imr_multiaddr.s_addr = inet_addr("224.10.10.10"); // 指定多播地址

setsockopt(udp_socket, IPPROTO_IP, IP_ADD_MEMBERSHIP, &a, sizeof(a));

struct ip_mreq
{
struct in_addr imr_interface ; /* 需要加入组 播的IP 地址 */
struct in_addr imr_multiaddr ; /* 组播地址 (D 类地址) */
};
D 类地址 : 224.0 . 0.1 ~ 239.255 . 255.255
// 组播结构体
struct in_addr
{
in_addr_t s_addr ;
};

4.接收与发送

recvfrom(udp_socket,buf,1024,0,NULL,NULL);          // 还是直接用udp对象就可以接收

 

   struct sockaddr_in arry_addr;  // 将发送到对象的结构体

   arry_addr.sin_family=AF_INET;

  arry_addr.sin_port=htons(8888);

 arry_addr.sin_addr.s_addr=inet_addr("224.10.10.10"); 

 sendto(udp_socket,buf,strlen(buf),0,(struct sockaddr *)&arry_addr,sizeof(arry_addr));

(需注意设置结构体需要与绑定对象的端口相同,网址为设置组播的网址)

udp广播

1.创建对象

int udp_socket = socket ( AF_INET , SOCK_DGRAM , 0 );
2.开启广播(即设置为广播属性)

    int on=1; //开启

  setsockopt(udp_socket,SOL_SOCKET,SO_BROADCAST,&on,sizeof(on));

3.发送广播信息

    struct sockaddr_in dest_addr;

    dest_addr.sin_family=AF_INET; //设置网络协议

    dest_addr.sin_port=htons(6666); //所有处于当前网段且,端口为 6666 的进程都可以收到数据

                                                        //即192.168.64网段的都能收到

    dest_addr.sin_addr.s_addr=inet_addr("192.168.64.255"); //设置广播地址 

    sendto(udp_socket,"hello",5,0,(struct sockaddr *)&dest_addr,sizeof(dest_addr));

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c实现 udp通信 的相关文章

  • 使用.Net Core创建UDP套接字

    如何创建一个 UDP 套接字以非阻塞方式接收本地端点中的数据 我不知道数据来自的远程端口 我在 Linux 中使用 NET Core 我认为我可以使用 ReceiveAsync 但它似乎无法以这种方式工作 我这样解决了这个问题 static
  • 在 iOS 中跨应用程序(后台/前台或分屏多任务处理)共享 UDP 数据

    我正在编写一个研究应用程序 该应用程序利用通过 UDP 广播数据的特定传感器 有各种商业应用程序使用此传感器 我们希望能够同时运行我们的应用程序和现有应用程序 在过去 iOS 8 及更低版本 我们会在后台运行应用程序来记录数据 并在前台运行
  • UDP 数据包在交付时是否保证是完整的、具有实际意义的?

    众所周知 UDP 用户数据报协议 并不安全 因为用它发送的数据包的顺序可能不按顺序传送 甚至根本不按顺序传送 但是 如果发送了 UDP 数据包 该数据包中的信息在实际意义上 99 99 及以上 是否保证正确 在实际意义上 99 99 及以上
  • 什么是 STUN?它是否需要端口转发服务器?

    我对没有基础服务器的 p2p 通信进行了一些研究 并通过了 STUN 据我所知 STUN 是 NAT 打孔 的一种方式 不需要对等方进行端口转发即可连接 这是正确的吗 打孔到底是什么意思 这一切看起来都很脆弱 因为如果不需要端口转发 它就会
  • 如何设置Winsock UDP套接字?

    我想创建一个仅向客户端发送数据的 Winsock UDP 套接字 我希望内核为我选择一个可用的端口 另一方面 我想指出要使用哪个本地 IP 因为我正在运行一些网卡 我尝试过梳理迷宫般的套接字选项 以及将套接字地址中的端口绑定设置为 0 但均
  • 数据报总是被完整接收吗?

    大多数数据报接收函数 例如c的recv或read java的DatagramPacket类或python的SocketServer 都包含找出接收数据量的可能性 c int amount recv sock buf n MSG WAITAL
  • Java:使用多个 DatagramSocket 接收 UDP 数据报包

    我正在尝试实现一种将 UDP 数据包发送到多个接收者的方法 我认为这应该是可行的设置setReuseAddress true 在接收 DatagramSocket 实例上 我的问题是 在某些情况下 我需要限制与本地计算机的通信 因此限制本地
  • 错误的 UDP 校验和没有效果:为什么?

    我正在尝试测试 UDP 程序 如果它接收到 UDP 校验和错误的数据 会发生什么情况 奇怪的是 它似乎没有任何效果 并且有效负载被成功接收 至少在 OS X 上是通过环回接口成功接收的 下面是一个示例 其中使用以下方式发送数据SOCK RA
  • 更改Windows下的默认套接字缓冲区大小[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我无法更改的应用程序正在丢弃一些传入的 UDP 数据包 我怀疑接收缓冲区溢出 是否有注册表设置可以使默认缓冲区大于 8KB From th
  • 接收来自 N 个客户端的响应,以回复通过 UDP 的广播请求

    我正在为特定类型的网络多媒体设备实现一种 IP 查找器 我想找出 LAN 中该类型的所有活动设备及其 IP 地址和其他详细信息 设备有自己的设备发现方式 其工作原理如下 客户端通过 UDP 通过 LAN 发送广播请求 目的端口号是固定的 作
  • 将 Docker 容器连接到网络接口/设备而不是 IP 地址

    经过仔细的研究 测试和摆弄 我只能找到通过从 IP 端口转发来将 Docker 容器连接到给定接口的方法 这可以通过添加来完成 p Host IP Host Port Container Port to a docker run命令 我有一
  • UDP sendto 上的 ECONNREFUSED 错误

    我在使用正在写入的应用程序时遇到一些无法解释的行为 使用 sendto 向多个端口发送 UDP 数据 所有端口均使用套接字 PF INET SOCK DGRAM 0 为了一组客户端读取进程的利益 这些 sendto 偶尔会不可预测地触发经济
  • VS2015:应用程序无法正确启动(0xc000007b)

    我在 Visual Studio 2015 上为 Windows 10 PC 编写了代码 该应用程序主要关注 UDP 通信 我使用 boost 库 它工作正常 但当我将代码文件夹移至 Windows 7 时 我收到错误 应用程序无法正确启动
  • 使用 STUN 打孔

    我目前正在尝试通过 Internet 发送 UDP 消息 并且必须为端点 A 和 B 都位于 NAT 后面 设置防火墙 为此 我想使用 STUN 服务器进行打孔 当 A 创建对 STUN 服务器的请求 例如 私有 85 1 1 12 600
  • 为多线程 UDP 客户端执行“close ()”时套接字描述符未释放

    我在下面编写了 UDP 客户端 它基本上生成一个单独的线程来接收数据报 但是数据报仅在主线程中发送 现在 在 Linux 发行版上实例化 udpClient 1 UDP 客户端后按 ctrl D 实现退出循环 围绕 getline 调用 并
  • 使用 Boost.Asio 进行广播的问题

    如果问题之前已得到解答 我提前表示歉意 但我已经搜索并没有找到任何对我有帮助的东西 正如问题标题所示 我正在尝试将包从服务器广播到一组侦听任何消息的客户端 客户端将计算一秒钟内收到的消息数 服务器端的事情是这样的 class Server
  • P2P网络游戏/应用程序:类似“战网”匹配服务器的不错选择

    我正在制作一个网络游戏 1v1 游戏中是 p2p 不需要游戏服务器 然而 为了让玩家能够 找到彼此 而不需要在另一种媒介中协调并输入IP地址 类似于网络游戏的现代时代 我需要有一个协调 匹配服务器 我无法使用常规网络托管 因为 客户端将使用
  • 如何使用 Nmap 检索 TCP 和 UDP 端口? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我需要在使用 Nmap 的同一扫描中以尽可能最快的方式检索 TCP 和 UDP 端口 我会尽力解释得更好 如果我使用最常用的命令 nmap 192 1
  • 尝试接收 UDP 多播时出现空指针异常

    在尝试了几次让简单的 UDP 多播接收器工作后 我感到很困惑 在我自己的代码无法按预期工作后 我尝试了 vertx 文档中发布的确切示例 DatagramSocket socket vertx createDatagramSocket ne
  • 为什么 Kademlia 使用 UDP?

    为什么Kademlia 分布式哈希表 http en wikipedia org wiki Kademlia使用 UDP 作为其网络传输协议 即使它不可靠 主要原因是您快速查询了许多以前从未建立过联系并且可能在查找过程中永远不会再看到的节点

随机推荐

  • 简易旋转倒立摆设计报告

    完整文档和源码 xff1a https github com Kevincoooool inverted pendulum 43 2017年成都信息工程大学 第六届 电协杯 电子设计竞赛 简易旋转倒立摆及控制装置 xff08 I题 xff0
  • OpenMV-IDE 免KEY提示 编译教程

    很多人在购买了OpenMV之后都没有购买key xff0c 虽然key作为一种捐赠开发者的形式存在 xff0c 但大多数人都是不愿意每次使用都看到那三个提示框的 xff0c 而且不愿意去购买key xff0c 附上我的编译教程 xff1a
  • OpenMV H7也就是OpenMV4来啦 最新

    17年开始做过了四个版本的openmv 可谓是电赛好帮手 开发了两年的openmv xff0c 我的目的就是让openmv变得便宜 目前官方的第四代openmv还在众筹中 xff1a https www kickstarter com pr
  • 开源一个安卓四轴上位机+配套ESP8266 UDP串口通信源码

    手机APP是由匿名四轴遥控器修改而来 xff0c 在原有基础上添加了双摇杆控制和单摇杆控制 数据通过UDP和ESP8266通信 协议可修改 安卓app源码 xff1a https github com Kevincoooool KSTC V
  • c++中函数屏蔽和函数参数屏蔽

    情况一 函数的屏蔽 例如 nbsp nbsp void Function int a int b nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp int c a b 若是不使用函
  • STM32串口之奇偶校验设置

    今天 xff0c 在调试rs485的时候出现了32芯片串口端可以正常发送数据 xff0c 485芯片数据输出端不能发送数据 xff0c 自己查了下485芯片手册 xff0c 发现485芯片有个引脚通过32芯片给出高低电平来控制它是接受还是发
  • 基于AudioQueue实现音频的录制和播放(标贝科技)

    标贝科技 https ai data baker com source 61 qwer12 填写邀请码fwwqgs xff0c 每日免费调用量还可以翻倍 基于AudioQueue实现音频的录制和播放 文章目录 基于AudioQueue实现音
  • webots建立四连杆机构模型

    webots建立四连杆机构模型 使用webots内置的插件构建四连杆机构建立robot形状参考文献 使用webots内置的插件构建四连杆机构 首先 xff0c 可以去官网下载最新的webots xff0c 网址 xff1a https ww
  • STM32使用FREERTOS获取系统时间

    使用CUBE MX生成带有free RTOS操作系统的工程 xff0c 我们经常会使用到系统相对时间 xff0c 尤其是使用其做数据采集的项目中经常需要给你数据打上时间的标签就需要实时获取系统的相对时间 当然 xff0c 我们可以单独开一个
  • 一个简单的C++工程管理的Makefile

    摘要 C C 43 43 代码都需要使用编译器来编译代码生成相应的目标文件 xff0c 在大部分的windows开发中 xff0c 开发者多用商用或开源的集成开发环境 xff08 IDE xff09 xff0c 比如 xff1a visua
  • STM32F4 使用SPI读取气压计MS5611的数据并转化为大气压强

    ms5611是同时支持I2C和SPI通信协议的气压计芯片 已经很普遍的被用在飞行器控制板上作为高度传感器 开发过stm32的朋友都知道它的硬件I2C是由bug的 xff0c 一般使用的都是自己编写的软件I2C通信协议 但是其硬件SPI通信却
  • DIY四旋翼(穿越机)软硬件设计

    今天教教大家怎么真正意义上的DIY四旋翼飞行器 xff0c 我将从机架入手DIY穿越机 下面是我的步骤 xff1a 1 设计机架三维图纸 xff1b 2 导出机架的二维图纸并做修改 xff1b 3 设计飞控板 xff1b 4 试飞 step
  • 磁力计校正和数据处理

    在飞控涉及到的几个传感器中磁力计因该是属于最简单的传感器 在飞控上一般使用的磁力计传感器芯片是HMC5883L HMC5983 MPU9250 MAG3110等 这些芯片利用的物理原理都相同 xff0c 只是在精度和数据接口上有些区别 下面
  • 在这个被欲望和利益所支配的世界里

    剩下的那点酒精再次滑过嘴角 xff0c 才感觉到一丝凉意 谁说酒精可以麻醉人的思维 xff0c 可以暂时忘掉想忘的一切 xff0c 骗人的 xff0c 都是骗人的 我依然很清醒 不可否认 xff0c 这的确是一个被欲望和利益所支配的世界 x
  • 写给夏燕第十一个男人

    悲哀 xff0c 李旧 xff09 是她第十一个男人 她想要什么呢 xff1f xff1f xff1f 很多男人吗 xff1f 很多是多少 xff1f 我是她第十个男人 xff0c 我原理她了 说自己以前走的路不可能回头了 xff0c 叫我
  • 美女登场

    不怕大家笑话 xff0c 我大学毕业时 xff0c 还是个处长 xff0c 所谓处长就是没有经过女人滋润的那种 xff0c 我想大家都知道我是什么意思的 其实 xff0c 上大学的时候我还是有些女人缘的 xff0c 毕竟在班上我的学习成绩还
  • 纠缠在回忆里的感伤

    一个身影从眼前晃过 xff0c 我本能的踩死了刹车 xff0c 车因为惯性向前使了一点后终于停了下来 xff0c 幸亏没有撞到那个骑车的老人 xff01 我尚惊魂未定 xff0c 额头冒出了冷汗 xff0c 好险 xff01 人在开车心却早
  • MySQL索引原理(标贝科技)

    标贝科技 https ai data baker com source 61 qwer12 填写邀请码fwwqgs xff0c 每日免费调用量还可以翻倍 什么是索引 xff1f 索引是帮助MySQL高效获取数据的数据结构 索引的本质就是数据
  • 最全最简单方法解决安装ROS的rosdep update超时错误

    最近利用虚拟机Ubuntu安装ROS xff0c 遇到了rosde update这一命令一直超时出错的问题 xff0c 在网上搜索很多资料 xff0c 终于解决 xff0c 所以总结一下解决方案 方法一 xff1a 手机开热点上网 不建议
  • c实现 udp通信

    1 创建对象 int udp socket 61 socket AF INET SOCK DGRAM 0 AF INET 网络通信协议 SOCK DGRAM 传输协议 属性默认 0 2 想接收信息就需要绑定地址信息 struct socka