c# - 自动获取服务器IP给客户端

标签 c# networking tcp ip

编写聊天程序(很多人都这样做),我发现我希望能够让客户端自动连接到服务器。

但是,服务器的 IP 地址不是永久的,所以我不能将它硬核到程序中

在 TCP 中,我正在寻找某种广播功能,让客户端知道服务器在哪里

有什么想法吗?

编辑:应该说,这将只是一个 LAN 程序 - 没有外部连接

最佳答案

如果您正在谈论 LAN 中的聊天并且出于某种原因您不能或不想使用 DNS,您可以实现或找到 UPnP 使用的发现协议(protocol)的实现。 SSDP基于UDP广播。据我所知,不可能通过 TCP 进行多播,因为 TCP 需要一个 session 。

如果您想通过互联网使用聊天服务器,您别无选择,只能使用 DNS。寻找动态 DNS 提供商(我使用 selfhost.bz)。在 C# 中,您可以将主机名解析为 IP 地址,如其他答案中所述。如果你有一个主机名可以连接到它可能足以将它传递给套接字,但是:

socket.Connect("myhostname.selfhost.bz", ...


编辑:既然你说你在局域网中,那么关于 SSDP 的更多细节。该协议(protocol)做的比您实际需要的要多。如果您正在考虑自己实现它,请不要严格遵守它。只需让您的客户在指定端口上发送广播即可。服务器永久监听该端口,一旦收到消息,就会用预定义的消息进行应答。当客户端收到该答复时,它将知道发件人是有效的服务器。

关于c# - 自动获取服务器IP给客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12537598/

相关文章:

c# - 使用 alpha 混合将 ARBG 转换为 RGB

networking - TCP拥塞控制-图形中的快速恢复

c - Telnet 客户端及其对 EOL 的处理

python - 这是 python 客户端的有效 TCP/IP 套接字循环吗?

c# - Asp.Net Core Identity - 创建自定义 token 提供者

c# - 打开 C :\windows\assembly\gac_msil from C#

c++ - 我们什么时候应该选择其他IPC而不是直接内存访问来进行线程间通信

java - 是否可以与共享主机建立 tcp 连接(服务器-客户端)?

linux - TCP 服务器中的 regd setsocketopt 和套接字内存使用情况

c# - 在不可能的情况下获取 NullReferenceException(检查 null 时)