2012-05-19 114 views
3

我有一个应用程序(用C/C++编写),它通过UDP在本地网络内的许多Windows和Linux主机之间进行通信(通过winsock/Linux-Sockets)。我只在每个主机上使用一个端口,因此只有一个Socket。一些消息是Broadcastet,答复通常是单播,但也有一些是广播。 Everthing工作到目前为止,但:如何区分UDP广播和单播?

我怎样才能找出Paket我是否收到(通过recvfrom)是广播或单播?

我发现的唯一解决方案是在有效载荷内发送此信息或使用不同的端口。两者都不是很不错...

+0

无论如何,通过在以太网层进行广播并在IP层使用单播地址,反之亦然,您实际上可以骗人。 – Flexo

回答

3

在Linux方面,你可以用setsockopt(2)设置PKT_INFOip(7)套接字选项,然后用recvmsg(2)得到UDP数据包的目的地址。

+0

这就是我一直在寻找的。在Windows上'WSARecvMsg'完成这项工作。谢谢! – trtracer