我正在使用.NET对等应用程序的想法,其中一个对等方使用UDP数据包在子网上公布其存在。然后,任何侦听对等体将从分组获得足够的信息以使用TCP与广告商建立直接通信信道。
似乎需要将广播数据包定向到特定的端口号,并且为了接收数据包,对等体需要绑定到IPAddress.Any上的该端口。
通过这种设计,是否可以运行绑定到同一NIC的多个对等体?我只是得到一个SocketException"通常只允许使用每个套接字地址(协议/网络地址/端口)",直到我添加以下代码行:
socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, 1);
设置此选项有什么含义?
答案 0 :(得分:1)
我不确定你是否可以通过广播来做到这一点。另一方面,它是链接本地多播的标准做法。由于IPv6多播API的设计优于IPv4 API,因此我建议使用IPv6链接本地 - 您不需要全局IPv6地址和路由,即使没有IPv6连接,您的应用程序也可以在任何现代系统上运行。
首先,选择一个随机的IPv6链路本地多播组,ff02::/16
中的任何内容都可以执行(有关详细信息,请参阅RFC 4291第2.7节)。然后,您的申请应该:
SO_REUSEADDR
; IPV6_MULTICAST_LOOP
设为0,将IPV6_MULTICAST_HOPS
设为1; IPV6_JOIN_GROUP
; sin6_scope_id
中的出接口的接口ID将UDP数据包发送到组播组。sin6_scope_id
确定收到的数据包的传入接口。这在RFC 3493第5.2节中有详细描述。