我正在开发 udp 服务器/客户端应用程序。由于要与服务器通信,所有客户端都必须知道服务器的 IP 地址和端口号。为此,我将服务器的 ip 和端口号硬编码到客户端,以便客户端每次都连接到相同的 ip 和端口号。(使用 ipconfig 命令找到服务器机器的 IP 地址。)但是现在,问题是我在 DHCP 网络上工作,并且每次重新启动服务器机器时,都有可能为其分配一个新的 IP 地址(不同于他们将连接的客户端知道的IP地址。)所以,我总是希望每次登录时将客户端硬编码的IP地址分配给服务器机器。有什么办法吗?我对此一无所知。搜索互联网,但找不到任何相关内容。
4 回答
假设你在局域网上工作,我就是这样做的。
假设您的 DHCP 服务器是可配置的:
- 在 dhcp 服务器中分配静态映射 MAC 地址/IP 地址,以便同一台机器始终获得相同的 IP(仅针对服务器,而不是针对每个客户端)。
大多数具有 DHCP 的入门级多合一设备都具有此功能,如果没有,购买具有该功能的新设备应该很便宜。如果您的 DHCP 服务器是一台真实的计算机,您当然可以将其配置为这样做。
此外,您可能希望告诉您的客户端使用本地 DNS,并在此本地 DNS 服务器中为您的服务器定义一个名称,这样您就不必在客户端中硬编码 IP 地址。但是地址应该位于某个配置文件中,而不是在任何情况下硬编码。
我使用 dnsmasq 作为本地名称的 DNS 服务器和 DHCP 服务器,为服务器提供始终相同的地址并将所有 DNS 请求指向自身。
这个问题可能有助于找到 dnsmasq 的 Windows 替代方案:https ://stackoverflow.com/questions/7709744/is-there-something-like-dnsmasq-for-windows
通过在 DHCP 服务器中添加一个保留字段,我们可以实现这一点。如果您使用的是 Windows DHCP 服务器,则有一个名为“Reservations”的部分,我们可以在其中提供您电脑的 MAC 地址和所需的 IP 地址。然后服务器将为您提供提到的IP。
对于开发人员的狭隘关注点,DHCP 保留可能是合乎逻辑的步骤。但是使用名称服务器要好得多。如果网络本身发生变化,或者服务器可能移动到另一个子网或什至可能移动到另一个区域,则使用来自 DHCP 保留的 IP 地址会失败,因为服务器的地址发生了变化。
如果您使用名称服务器,则不会遇到任何这些问题。这就是 DNS 的本意。将其视为“服务提供者查找服务”,将您的服务与运行它的主机分离。
而且,就像已经建议的那样,您永远不应该对 IP 地址或 DNS 名称或其他任何可能更改的内容(即使您认为它不会更改)进行硬编码,除非设计目标是如果某些更改(=不可配置)。