UDP broadcasting for LAN computer discovery & server setup

戏子无情 提交于 2020-01-24 03:00:08

问题


I'm working on a small, networked game prototype which will be played on LANs using UDP. For the discovery of other computers on the network, I've been investigating broadcasting. However, I'm still unsure about a few details regarding UDP socket setup/usage (networking newbie). I found a good library to use after the game is started, but at first, all computers running the game must be discovered and one has to be chosen as a server. So my questions are the following:

  • Can a single UDP socket be used to listen for and send broadcasts? I'm pretty sure the answer to this is yes, but I wanted to verify it.
  • When using UDP, do you actually have to use bind()? As far as I understand, connect() is not required, nor is send()/recv(), since they are for TCP (sendto()/recvfrom() being the replacements).

回答1:


  1. Yes, you can send broadcasts, send unicasts and receive packets (either broadcast or unicast) all from a single socket. This is VERY useful for making "reply to sender" work.

  2. Not every socket needs to use bind. If you don't, a port will be chosen for you automatically. But someone has to bind a pre-shared port number in order for the first packet (possibly a broadcast) to be properly delivered. The first packet contains the source port and IP address; reply packets can just use this.

  3. Binding both ends to fixed port numbers does however make firewall configuration simpler.

  4. setsockopt(SO_BROADCAST), otherwise you'll get errors trying to send broadcast packets.



来源:https://stackoverflow.com/questions/6393123/udp-broadcasting-for-lan-computer-discovery-server-setup

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!