![]() |
1
1
最好的选择是只创建一个端口与每个对等端通信。您只创建一个套接字,并且只使用一个端口与任意数量的对等方发送/接收数据。您可以通过查看每个数据包的源地址来区分接收的数据。这种方式的代码更少复杂,资源效率更高。 创建多个端口绝对没有优势。这将使您的代码复杂化,并将使用更多的资源而没有好处。资源消耗将随着更多的同行而增长。 |
![]() |
2
1
我从未对这种应用程序模型做过任何事情,但以下是我的一些想法。 要考虑的一个重要问题是对等端之间是否有防火墙。如果是这样,则需要为每个侦听端口打一个洞。这可以一次完成(例如,路由器端口转发规则)或动态完成(UPnP等),但您可能无法指望自动全锥NAT为您完成此操作。如果您希望在对等端之间设置防火墙,我建议您使用单个端口以方便编程,并严格通过远程地址或其他协议内标识符来识别对等端。 每个用户使用一个端口将使识别通信更加简单,但如果您希望参与者的数量增加n(n-1)/2。如果您从未期望超过一个小数目(例如20个),则每个对等端口将工作得很好,无需付出太多努力。 您的另一个选择(可能)可能是使用多播。如果您的所有对等方都在同一个广播域上,这将减少总线争用,并可能使您的编码更加清晰。 希望这有帮助。如果这不是你想要的,我很抱歉。祝你好运 |
![]() |
3
1
如果每个对等方都可以获得传入数据报的源IP/源端口(我打赌它可以),这足以区分对等方。
请参见上文,最重要的是,这一点与您的广播基本理念相矛盾。它只是增加了一定程度的复杂性(而且可能不太可扩展,即使目前您只设想了8个对等体)。 在您的基本要求中,我认为您可能会在以下两个方面陷入两难境地:
这引发了一些问题,正如你通过提问已经意识到的那样。 我看到了另外两个问题:
还有第三种方法:
该方法用于UPnP的一部分SSDP(简单服务发现协议)。我愿意 不 建议你使用SSDP,它可能对你想做的事情来说过于臃肿,你说你想要一些简单的东西。 总而言之,您首先必须解决您的困境:决定并区分 真正地 与单播部分相比,需要广播。YMMV。 PS:使用广播UDP也会遇到这样的问题:虽然在LAN上可以,但除非使用多播路由,否则这不会通过路由器。但这是另一个故事。 |
![]() |
Ian Newson · 协议缓冲区、C#和网络流:永远不会收到消息 2 年前 |
![]() |
Evantoki Alfa · 线程“main”java中出现异常。lang.ArrayIndexOutOfBoundsException:演示时为0。查找。main(Lookup.java:19) 2 年前 |
![]() |
ê¹ì¼í · 如何发送带有引号的关键数据的POST方法? 2 年前 |
![]() |
TiDu · 使用EKS设置出口网关的最简单方法,无需Istio 2 年前 |
![]() |
Nop · 无法关闭键盘中断(Python)上的套接字连接 2 年前 |