我有一个自定义产品(运行 Linux)每隔几秒就会向端口 38280 发出广播数据包。
这是 Wireshark 的屏幕截图,显示了相关数据包。
在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()
将监视添加到套接字。
不确定这有多便携,但它对我有用!!
g_socket_listener_add_inet_port()仅适用于TCP数据包吗?
是的。
您应该能够以稍低的级别处理 UDP
g_socket_listener_add_address()
。