局域网计算机发现和服务器设置的UDP广播

7

我正在开发一个小型的网络游戏原型,将使用UDP在局域网进行游戏。为了发现网络上的其他计算机,我一直在研究广播。但是,关于UDP套接字的设置/使用(网络新手),我仍然不确定一些细节。我找到了一个很好的库,在游戏开始后可以使用它,但首先必须发现运行游戏的所有计算机,并选择一个作为服务器。所以我的问题如下:

  • 单个UDP套接字可以用于监听和发送广播吗?我相信答案是肯定的,但我想验证一下。
  • 当使用UDP时,实际上是否必须使用bind()?据我所知,connect()不是必需的,send()/recv()也不是必须的,因为这是针对TCP的(sendto()/recvfrom()是替代品)。

这是一个经过深思熟虑的问题,但它包含了多个问题,最好分开提出。 - user195488
@0A0D 很好的观点,我不确定是否应该将它们拆分,因为它们有些相关。我会将UDP问题放在一起,并将最后两个问题单独提出来。 - Gemini14
1个回答

5
  1. 是的,您可以从单个套接字发送广播、发送单播和接收数据包(广播或单播),这对于实现“回复发送者”非常有用。

  2. 并不是每个套接字都需要使用bind。如果您不使用,系统会自动为您选择一个端口号。但是,必须有人绑定一个预共享的端口号,以便第一个数据包(可能是广播)能够正确传递。第一个数据包包含源端口和IP地址;回复数据包只需使用此信息。

  3. 将两端绑定到固定的端口号确实使防火墙配置更简单。

  4. setsockopt(SO_BROADCAST),否则尝试发送广播数据包时会出现错误。


非常清晰的答案,特别是关于绑定的部分——现在我更明白了。谢谢! - Gemini14

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接