2012-05-19 185 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