IP_MREQ 結構 (ws2ipdef.h)

ip_mreq 結構提供 IPv4 位址的多播群組資訊。

語法

typedef struct ip_mreq {
  IN_ADDR imr_multiaddr;
  IN_ADDR imr_interface;
} IP_MREQ, *PIP_MREQ;

成員

imr_multiaddr

IPv4 多播群組的位址。

imr_interface

介面的本機 IPv4 位址,或應該加入或卸載多播群組的介面索引。 此值是以網路位元組順序排列。 如果此成員指定 0.0.0.0 的 IPv4 位址,則會使用預設的 IPv4 多播介面。

若要使用 1 的介面索引,會與 0.0.0.1 的 IP 位址相同。

備註

ip_mreq 結構會與 IPv4 位址搭配使用。 ip_mreq 結構會與IP_ADD_MEMBERSHIPIP_DROP_MEMBERSHIP套接字選項搭配使用。

用於 IPv4 多播程式設計的 ip_mreq 結構和相關結構是以 RFC 3768 第 4 節和第 8.1 節中的 IETF 建議為基礎。 如需詳細資訊,請參閱http://www.ietf.org/rfc/rfc3678.txt

如需具有 IPv4 的更多可設定多播功能,請使用 ip_mreq_source 結構。 如需詳細資訊,請參閱 多播程序設計

在 Windows Vista 和更新版本上,有一組套接字選項可用於支援 IPv6 和 IPv4 位址的多播程序設計。 這些套接字選項與IP無關,可在IPv6和IPv4上使用。 這些IP無關的選項會使用 GROUP_REQGROUP_SOURCE_REQ 結構,而且是Windows Vista和更新版本上多播程式設計慣用的套接字選項。

ip_mreq 結構是 IPv4 相當於 IPv6 型ipv6_mreq結構。

imr_interface成員可以是介面索引。 除了 0.0.0.0.0 的 IP 位址之外,0.x.x 區塊中的任何 IP 位址都會視為介面索引, () 0.0.0 的 IP 位址除外。 介面索引是24位的數位。 未使用 0.0.0.0/8 IPv4 位址區塊, (此範圍保留) 。 GetAdaptersAddresses 函式可用來取得用於imr_interface成員的介面索引資訊。

建議您一律在ip_mreq結構的imr_interface成員中指定本機 IPv4 位址或介面索引,而不是使用預設介面。 這在具有多個網路介面和多個公用 IPv4 位址的電腦上特別重要。

用於 IPv4 多播的預設介面是由 Windows 中的網路堆疊所決定。 應用程式可以使用 GetIpForwardTable 函式來判斷用於 IPv4 多播的預設介面,以擷取 IPv4 路由表。 目的地 IP 位址為 224.0.0.0.0 之路由計量的最小值網路介面是 IPv4 多播的預設介面。 您也可以使用下列命令,從命令提示字元顯示路由表:

路由列印

IP_MULTICAST_IF套接字選項可用來設定預設介面來傳送IPv4多播封包。 此套接字選項不會變更用來接收 IPv4 多播封包的預設介面。

典型的 IPv4 多播應用程式會使用 IP_ADD_MEMBERSHIP 套接字選項搭配 ip_mreq 結構,以聯結多播群組,並在特定介面上接聽多播封包。 IP_MULTICAST_IF套接字選項可用來設定介面,將 IPv4 多播封包傳送至多播群組。 最常見的案例是多播應用程式,可接聽並傳送多播群組的相同介面。 多播應用程式可能會使用多個套接字來接聽,以及一或多個套接字進行傳送。

在針對 Windows Vista 和更新版本發行的 Microsoft Windows 軟體開發套件 (SDK) 上,頭檔的組織已變更,而且ip_mreq結構定義於 Ws2ipdef.h 頭檔中,該文件會自動包含在 Ws2tcpip.h 頭檔中。 不應直接使用 Ws2ipdef.h 頭檔。

注意IP_MREQPIP_MREQ衍生結構只會定義在 Windows Vista 和更新版本的發行 Windows SDK 上。 ip_mreq 結構應該用於舊版的 Windows SDK。
 

規格需求

需求
最低支援的用戶端 Windows XP [僅限傳統型應用程式]
最低支援的伺服器 Windows Server 2003 [僅限傳統型應用程式]
標頭 ws2ipdef.h (包含 Ws2tcpip.h)

另請參閱

GROUP_REQ

GROUP_SOURCE_REQ

GetAdaptersAddresses

GetIpForwardTable

IPPROTO_IP套接字選項

多播程序設計

套接字選項

ip_mreq_source

ip_msfilter

ipv6_mreq