我正在开发一个小型的网络游戏原型,它将使用UDP在局域网上播放。为了发现网络上的其他计算机,我一直在调查广播。但是,我仍然不确定有关UDP套接字设置/使用的一些细节(网络新手)。我在游戏开始后找到了一个很好的库,但首先,必须发现所有运行游戏的计算机,并且必须选择一个作为服务器。所以我的问题如下:
bind()
?据我了解,connect()
不是必需的,也不是send()/recv()
,因为它们适用于TCP(sendto()/recvfrom()
是替代品。)答案 0 :(得分:4)
是的,您可以从单个套接字发送广播,发送单播和接收数据包(广播或单播)。这对于“回复发件人”工作非常有用。
并非每个套接字都需要使用bind。如果不这样做,将自动为您选择一个端口。但有人必须绑定预共享端口号才能正确传送第一个数据包(可能是广播)。第一个数据包包含源端口和IP地址;回复包只能使用它。
然后将两端绑定到固定端口号会使防火墙配置更简单。
setsockopt(SO_BROADCAST)
,否则您在尝试发送广播包时会出错。