SSDP和接口IP地址
我正在编写需要发送和接收SSDP消息的UPnP AV / DLNA DMS。为了响应一些
M-SEARCH
数据包,我需要发送一个带有资源URL(在这种情况下是HTTP服务器)的回复,我选择将其绑定到INADDR_ANY
(0.0.0.0
)。当然,这个地址对于M-SEARCH
包的发送者没有意义:收到M-SEARCH
的接口的地址是最合适的。
如何确定在回复数据包中发送的适当地址?
我考虑过的一些想法是:
将不同的接收器绑定到每个插槽。当接收者获得一个M-SEARCH
包时,回复地址可以在回复中使用套接字的本地地址。然而,这需要知道并迭代所有接口,并在接口可用性改变时添加和移除接收器。
将单个接收器放在INADDR_ANY
上,并迭代接口网络掩码以确定可能的源。但是,多个接口可能共享同一个子网。
收到数据包后,提取数据包IP目标地址。这将是IP特定的,并且可能在网络抽象中的某处丢失。
没有找到相关结果
已邀请:
1 个回复
郡豪靠暖
后跟
报告TCP / IP堆栈分配给套接字的IP地址。 (显然,如果服务器和客户端位于NAT系统的两侧,这将与客户端可以使用的内容不匹配;在这种情况下,可能有聪明的UPnP技巧来发现客户端可用于联系服务器的IP地址。) 我假设您的服务器看起来像这样:
您可以附加类似于此的代码:
检查
的IP地址。因为这些是通用接口,所以它适用于IPv4或IPv6地址。