c—每次登录时,为服务器分配静态/相同的IP地址



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

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

  • 你的客户端在第一次上线时广播"服务器在哪里"的消息。服务器响应"I am at IP address X.X.X.X"
  • 当服务器启动时,它会广播"服务器现在的IP地址是Y.Y.Y.Y",这样如果服务器崩溃了,客户端就会开始使用新的服务器。

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

假设您的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服务器,有一个名为"保留"的部分,在那里我们可以给出您的pc的MAC地址和所需的IP地址。然后服务器会为您提供上述IP。

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

如果您使用名称服务器,则不会有任何这些问题。这就是DNS要做的事情。可以把它想象成一个"服务提供者寻找服务",它将你的服务从它运行的主机上分离出来。

而且,就像已经建议的,你不应该硬编码一个IP地址或DNS名称或任何其他可能改变(即使你认为它不会改变),除非它是一个设计目标,事情不再工作,如果一些变化(=不可配置)。

最新更新