如何使用GTK / GIO接收UDP广播包?

问题描述 投票:0回答:1

我有一个自定义产品(运行 Linux)每隔几秒就会向端口 38280 发出广播数据包。

这是 Wireshark 的屏幕截图,显示了相关数据包。

Wireshark capture

在Linux虚拟机(Ubuntu 22.04 guest,Win11主机)下,我可以运行netcat来查看这些广播数据包:-

$ nc -lu 38280
<xmllink><hello address="0" id="C8A0308399A3" ident="13579"/></xmllink>

我现在正在尝试编写一个简单的 GTK 应用程序来侦听这些数据包。

到目前为止,我已经尝试使用

g_socket_listener_add_inet_port()
但是(经过一些额外的测试)只有当我将数据包直接发送到 IP 地址和端口(而不是广播消息)时,才会看到数据包。

g_socket_listener_add_inet_port((GSocketListener*)l_svcKnockKnock, l_nSlaveAnnouncePort, NULL, &error);

谁能解释一下我错过了什么?

g_socket_listener_add_inet_port()
仅适用于TCP数据包吗?

如果是这样,我如何设置 UDP 广播的侦听器?

更新

我现在找到了这个SO帖子,它给了我一些工作代码。

请注意,它不使用普通的侦听器服务...而是使用

g_io_add_watch()
将监视添加到套接字。

不确定这有多便携,但它对我有用!!

udp gtk listener broadcast gio
1个回答
0
投票

g_socket_listener_add_inet_port()仅适用于TCP数据包吗?

是的。

您应该能够以稍低的级别处理 UDP

g_socket_listener_add_address()

© www.soinside.com 2019 - 2024. All rights reserved.