gpt4 book ai didi

sockets - 广播ip :port by socket server

转载 作者:行者123 更新时间:2023-12-03 11:56:57 32 4
gpt4 key购买 nike

我正在尝试寻找一种方法来让客户端知道套接字服务器ip:port,而无需显式定义它。通常,我有一个在便携式设备上运行的套接字服务器,该套接字服务器通过DHCP(通过WiFi)连接到网络,理想情况下,客户端应该能够自动找到它。

因此,我想一个问题是套接字服务器是否可以通过本地网络以某种方式广播其地址?我认为UPnP可以做到这一点,但我宁愿不介入。

我很确定这个问题在很多时候都被问到了,但是我可以找到合适的关键词来搜索。

最佳答案

一种方法是通过UDP广播数据包。如果您使用的是BSD套接字,请参见beej's guide。和here是Microsoft的相同版本。

假设应用程序的所有客户端都在路由器的同一侧,那么255.255.255.255(或IPv6的ff02::1)的广播地址应该绰绰有余。

多播是另一种选择,但是如果这仅是局域网,那么我认为这不是必需的。

建议

选择一个UDP端口号(举例来说,我们选择1667)。客户端应在255.255.255.255:1667(或任何等效的形式,例如IPEndPoint(IPAddress.Any, 1667))上监听UDP消息。服务器应在同一地址上广播消息。

格式建议

UDP数据包:前四个字节为魔数(Magic Number),接下来的四个字节为IPv4地址(您可能需要添加其他名称,例如服务器名称)。

魔术数字是为了防万一与使用同一端口的另一个应用程序发生冲突。检查包的长度和魔数(Magic Number)。

服务器将以30秒左右的时间间隔广播该数据包。 (或者,仅当客户端通过广播发送请求时,才可以让服务器发送响应。)

关于sockets - 广播ip :port by socket server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7664109/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com