当前位置: 首页 > news >正文

Go在Win10上接收UDP组播数据

  • 第一步、绑定本机某张网卡的IP和端口,本代码选择IP为0.0.0.0,端口为8000;
  • 第二步、加入组播,组播地址为“224.0.0.1”;
  • 第三步、循环接收UDP组播数据;

代码

package mainimport ("fmt""golang.org/x/net/ipv4""log""net""os"
)// 组播地址和端口
var (multicastAddress = "224.0.0.1"port             = 8000
)func main() {// 绑定IP和端口listener, err := net.ListenPacket("udp4", fmt.Sprintf("0.0.0.0:%d", port))if err != nil {log.Fatal(err)}// 关闭监听defer listener.Close()packConnector := ipv4.NewPacketConn(listener)// 加入组播if err := packConnector.JoinGroup(nil, &net.UDPAddr{IP: net.ParseIP(multicastAddress)}); err != nil {log.Fatal(err)}// 离开组播defer packConnector.LeaveGroup(nil, &net.UDPAddr{IP: net.ParseIP(multicastAddress)})// 创建一个缓冲区(切片)用于接收数据buffer := make([]byte, 1024*2)go func() {for {// 接收数据n, _, srcAddr, err := packConnector.ReadFrom(buffer)if err != nil {log.Println("Error reading:", err)continue}// 打印接收到的数据和源地址data := buffer[:n]senderAddr := srcAddr.String()// fmt.Printf("Received %d bytes from %s: %s\n", n, senderAddr, hex.Dump(data))fmt.Printf("Received %d bytes from [%s]:\n%s\n", n, senderAddr, string(data))}}()for {var input stringfmt.Scanln(&input)if input == "q" {fmt.Println("Program exit...")os.Exit(0)break}fmt.Println(input)}
}

效果演示

在这里插入图片描述

相关文章:

  • Y9000P + ubuntu22.04 配置Anaconda+pycharm +pytorch
  • python作业题百度网盘,python作业答案怎么查
  • 汽车零配件装配产线中使用RFID技术和不使用RFID技术的优缺点
  • Go 泛型发展史与基本介绍
  • Spring系列:基于Spring-Jdbc实现事务
  • HBase基础知识(六):HBase 对接 Hive
  • 前后端访问报错
  • MyBatis的缓存
  • Python pandas 操作 excel 详解
  • electron autoUpdater自动更新使用示例 客户端+服务端
  • Debian Linux完全卸载gitlab-ce
  • Servlet见解2
  • Typora Mac激活
  • 2024 年甘肃省职业院校技能大赛 应用软件系统开发赛项样题
  • Elasticsearch可视化平台Kibana [ES系列] - 第498篇
  • CSS 三角实现
  • iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码...
  • passportjs 源码分析
  • TCP拥塞控制
  • 构建工具 - 收藏集 - 掘金
  • 关于字符编码你应该知道的事情
  • 欢迎参加第二届中国游戏开发者大会
  • 腾讯优测优分享 | Android碎片化问题小结——关于闪光灯的那些事儿
  • 协程
  • 自动记录MySQL慢查询快照脚本
  • #快捷键# 大学四年我常用的软件快捷键大全,教你成为电脑高手!!
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (C++)栈的链式存储结构(出栈、入栈、判空、遍历、销毁)(数据结构与算法)
  • (C语言)strcpy与strcpy详解,与模拟实现
  • (二刷)代码随想录第16天|104.二叉树的最大深度 559.n叉树的最大深度● 111.二叉树的最小深度● 222.完全二叉树的节点个数
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理 第13章 项目资源管理(七)
  • (七)Knockout 创建自定义绑定
  • (算法)前K大的和
  • (一)kafka实战——kafka源码编译启动
  • (转)清华学霸演讲稿:永远不要说你已经尽力了
  • .Net Attribute详解(上)-Attribute本质以及一个简单示例
  • .NET Framework 服务实现监控可观测性最佳实践
  • .NET(C#) Internals: as a developer, .net framework in my eyes
  • .NET精简框架的“无法找到资源程序集”异常释疑
  • .NET开发不可不知、不可不用的辅助类(一)
  • .vollhavhelp-V-XXXXXXXX勒索病毒的最新威胁:如何恢复您的数据?
  • @Transactional 详解
  • [ C++ ] STL_list 使用及其模拟实现
  • [.net] 如何在mail的加入正文显示图片
  • [ACL2022] Text Smoothing: 一种在文本分类任务上的数据增强方法
  • [Algorithm][动态规划][两个数组的DP][正则表达式匹配][交错字符串][两个字符串的最小ASCII删除和][最长重复子数组]详细讲解
  • [Android Studio] 开发Java 程序
  • [C++ 从入门到精通] 12.重载运算符、赋值运算符重载、析构函数
  • [CSS]浮动
  • [CUDA 学习笔记] CUDA kernel 的 grid_size 和 block_size 选择
  • [docker] Docker的私有仓库部署——Harbor
  • [Docker]五.Docker中Dockerfile详解
  • [ffmpeg] aac 音频编码
  • [Flutter]设置应用包名、名称、版本号、最低支持版本、Icon、启动页以及环境判断、平台判断和打包
  • [IDF]摩斯密码