gpt4 book ai didi

c# - 如何为 IP 地址定义 TcpListener

转载 作者:可可西里 更新时间:2023-11-01 02:40:54 27 4
gpt4 key购买 nike

我查看了一些 TcpListenersTcpClients 的例子,在一个例子中,服务器端的 TcpListener 是这样声明的

TcpListener listener = TcpListener.Create(8080);
listener.Start();

另一个例子是这样的

TcpListener listener = new TcpListener("78.78.78.120", 8080);
listener.Start();

从逻辑上讲,第一种方法应该使用机器的默认外部 IP 地址,而第二种方法是您明确指定的。

所以我想问,定义它的最佳方式是什么?如果服务器机器有动态 IP 地址,会发生什么?如果使用动态 IP,它会在第二种方法中出错吗?如果客户端应用程序不知道要连接到的 IP 地址(如果它是动态的),它将如何连接到服务器?

最佳答案

So I am asking, what is the best way to define it?

这取决于你想要什么样的行为。这就是 API 提供选项的原因:一种尺寸不一定适合所有人。

在一些机器上有多个网络适配器,在其中一些机器上,希望将服务器的操作限制在这些适配器的某个子集上,甚至只是一个。在这些情况下,提供一种将套接字仅绑定(bind)到一个适配器的方法很有用。

在其他情况下,服务器需要监听所有可用的网络适配器。在这种情况下,使用默认值(或显式提供 IPAddress.Any)是“最佳方式”(即唯一方式)。

What will happen, if the server machine has dynamic IP address? Will it give error in the second method, if it's with dynamic IP?

如果提供了正确的 IP 地址,它将正常工作。 IP 地址是动态的这一事实并不排除它用于 TCP 监听套接字。

如果提供的 IP 地址不正确(即未分配给机器的 IP 地址),则会发生错误。

And how will the client app connect to the server, if it does not know the IP address it is going to connect to (if it is dynamic)?

如果网络客户端不知道 IP 地址,则无法连接到网络服务器。

但是,具有动态 IP 地址的服务器并不一定排除客户端知道该地址。

即使在非动态情况下,客户端了解 IP 地址的最常见方式是询问 DNS 服务器,该服务器将文本名称解析为实际 IP 地址。有些服务为具有动态 IP 地址的服务或机器提供 DNS 名称解析;他们通常通过使用固定域名来实现这一点,将动态寻址的服务器分配给子域。

例如,您可以从 noip.com 订阅服务,从他们那里购买域 skaidar.noip.com。然后客户端将查找该名称,正常的 DNS 解析会将其转换为您服务器的 IP 地址。此类服务要求您的服务器或某些相关机器在动态分配的 IP 地址发生变化时主动更新提供商的名称解析信息;不同的提供商有不同的机制来做到这一点。

当然,人类始终可以找到动态分配的 IP 地址,然后直接将其键入以供客户端使用。 :)

关于c# - 如何为 IP 地址定义 TcpListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29446929/

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