2011-06-18 19 views
7

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

  • 可以使用单个UDP套接字来侦听和发送广播吗?我很肯定这个答案是肯定的,但我想验证它。
  • 使用UDP时,您是否实际上必须使用bind()?据我了解,connect()不是必需的,也不是send()/recv(),因为它们是TCP(sendto()/recvfrom()是替代品)。
+0

这是一个深思熟虑的问题,但它包含多个问题,可能会更好地作为单独的问题。 – 2011-06-18 01:46:25

+0

@ 0A0D好点,我不确定是否应该分开它,因为它们有点相关。我将把UDP包放在一起,并把最后两个作为单独的问题提出来。 – Gemini14

回答

4
  1. 是的,你可以发送广播,单播发送和接收数据包(广播或单播)从单一插座。这对于“回复发件人”的工作非常有用。

  2. 不是每个套接字都需要使用绑定。如果你不这样做,将自动为你选择一个端口。但是有人必须绑定一个预共享端口号才能正确传送第一个数据包(可能是广播)。第一个数据包包含源端口和IP地址;回复数据包可以使用这个。

  3. 但是,将两端绑定到固定的端口号会使防火墙配置更简单。

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

+0

非常明确的答案,特别是关于绑定的一点 - 现在对我来说更有意义。谢谢! – Gemini14