5

我正在开发 udp 服务器/客户端应用程序。由于要与服务器通信,所有客户端都必须知道服务器的 IP 地址和端口号。为此,我将服务器的 ip 和端口号硬编码到客户端,以便客户端每次都连接到相同的 ip 和端口号。(使用 ipconfig 命令找到服务器机器的 IP 地址。)但是现在,问题是我在 DHCP 网络上工作,并且每次重新启动服务器机器时,都有可能为其分配一个新的 IP 地址(不同于他们将连接的客户端知道的IP地址。)所以,我总是希望每次登录时将客户端硬编码的IP地址分配给服务器机器。有什么办法吗?我对此一无所知。搜索互联网,但找不到任何相关内容。

4

4 回答 4

3

假设你在局域网上工作,我就是这样做的。

假设您的 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

于 2013-04-05T06:55:59.977 回答
3

假设您的客户端是服务器本地的,为什么不放弃硬编码的服务器 IP 地址,并从DHCP借一个页面并使用某种服务发现方法:

  • 您的客户第一次上线时会广播“服务器在哪里”消息。服务器响应“我在 IP 地址 XXXX”
  • 当服务器启动时,它会广播“服务器现在位于 IP 地址 YYYY”,这样如果服务器崩溃,客户端就会开始使用新服务器。
于 2013-04-05T06:30:21.187 回答
1

通过在 DHCP 服务器中添加一个保留字段,我们可以实现这一点。如果您使用的是 Windows DHCP 服务器,则有一个名为“Reservations”的部分,我们可以在其中提供您电脑的 MAC 地址和所需的 IP 地址。然后服务器将为您提供提到的IP。

于 2013-04-05T07:09:28.437 回答
1

对于开发人员的狭隘关注点,DHCP 保留可能是合乎逻辑的步骤。但是使用名称服务器要好得多。如果网络本身发生变化,或者服务器可能移动到另一个子网或什至可能移动到另一个区域,则使用来自 DHCP 保留的 IP 地址会失败,因为服务器的地址发生了变化。

如果您使用名称服务器,则不会遇到任何这些问题。这就是 DNS 的本意。将其视为“服务提供者查找服务”,将您的服务与运行它的主机分离。

而且,就像已经建议的那样,您永远不应该对 IP 地址或 DNS 名称或其他任何可能更改的内容(即使您认为它不会更改)进行硬编码,除非设计目标是如果某些更改(=不可配置)。

于 2013-04-05T08:13:39.003 回答