有沒有可能通過Boost.Asio獲得給定IPv4地址的「真實本地」廣播地址?如何使用Boost.Asio解析IPv4地址的實際廣播地址
ip::address_v4::netmask僅返回基於IPv4地址等級的網絡掩碼,因此在ip::address_v4::broadcast的過載情況下無法可靠使用。
我需要解析本地計算機上給定(現有)主機IPv4地址的特定廣播地址,因爲我無法使用廣播地址爲255.255.255.255的UDP端點。
編輯:爲了澄清,我不想將主機名解析爲IP地址,反之亦然。
編輯:下面是一個例子:
eth0:
host address: 192.168.0.1
net mask...: 255.255.0.0 (**not** class C)
所以我要檢索的廣播地址192.168.255.255
,但我想指定唯一的輸入是本地網絡地址。因此,「解決」或「查詢」是正確的術語,因爲我不想計算它。
我有一個UDPv4服務器,我將其綁定到特定的本地端點(通過指定本地IPv4主機地址)。我想在單播模式和廣播模式下使用此服務器,所以我需要指定遠程端點。我無法使用由ip::address_v4::broadcast返回的「全局廣播」地址執行此操作,因爲該操作始終會返回255.255.255.255
,這會導致意外行爲。除了主機地址之外,我還指定了一個標誌來正確設置套接字選項,以便通過basic_datagram_socket::broadcast啓用廣播。
如果你有一個例子如何實現這一點,我將不勝感激。也許我的想法太複雜了......
您是否嘗試將廣播地址設置爲地址本身?另一個問題:你嘗試播放嗎? http://www.boost.org/doc/libs/1_49_0/doc/html/boost_asio/reference/ip__address_v4/broadcast.html – Tanuki 2014-10-29 18:19:45
@巴里那個鏈接是完全不相關的。你只是對「解決」這個詞做出迴應(我覺得這個詞在這裏被濫用了) – sehe 2014-10-29 20:44:51
@Florian在所有應有的尊重下,我很困惑你爲什麼低估了我的答案,我在那裏展示了**完全**如何在網絡掩碼中使用'address_v4 :: broadcast'。你聲稱'broadcast()'總是返回255.255.255。255只是無效的,而且你實際上已經讀到了答案,完成了所顯示的輸出,你已經看到了。此外,不,這是**不**所謂的決議。你可能想稱它爲派生或計算。要解決在IP上下文中的具體含義,請使用命名服務來解析主機或服務地址。 – sehe 2014-10-29 23:30:08