我正在编写一个需要发送和接收SSDP消息的UPnP AV / DLNA DMS 。为了响应某些数据包,我需要发送带有资源(在本例中为 HTTP 服务器)的 URL 的回复,我已选择绑定到( )。当然,这个地址对数据包的发送者来说是没有意义的:接收数据包的接口地址是最合适的。M-SEARCH
INADDR_ANY
0.0.0.0
M-SEARCH
M-SEARCH
如何确定在回复数据包中发送的适当地址?
我考虑过的一些想法是:
- 将不同的接收器绑定到每个套接字。当接收者收到一个
M-SEARCH
数据包时,回复地址可以在回复中使用套接字的本地地址。然而,这需要了解和迭代所有接口,并随着接口可用性的变化添加和删除接收器。 - 将单个接收器放在 上
INADDR_ANY
,并迭代接口网络掩码以确定可能的来源。但是,多个接口可能共享同一个子网。 - 收到数据包后提取 IP 目标地址。这将是特定于 IP 的,并且可能会在网络抽象的某个地方丢失。