如何为 IP 地址定义 TcpListener

3

我看了一些有关 TcpListenersTcpClients 的例子,其中有一个例子中服务器端的 TcpListener 声明如下:

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

在另一个例子中,情况就像这样。
TcpListener listener = new TcpListener("78.78.78.120", 8080);
listener.Start();

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

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

1个回答

2
我来回答一下,什么是最好的定义方法?
这取决于你想要的行为方式。这就是API提供选项的原因:并非所有情况都适用相同的选项。
在某些机器上有多个网络适配器,在其中一些机器上,将服务器的操作限制在其中一些适配器的子集或甚至只有一个适配器是可取的。在这些情况下,提供一种将套接字绑定到一个适配器的方法很有用。
在其他情况下,服务器监听所有可用的网络适配器是可取的。在这种情况下,使用默认设置(或明确提供IPAddress.Any)是“最佳方法”(即唯一方法)。
如果服务器机器具有动态IP地址会发生什么情况?如果第二种方法是动态IP,则是否会出错?
如果提供了正确的IP地址,则可以正常工作。动态IP地址事实并不排除其用于TCP侦听套接字。
如果提供了不正确的IP地址(即未分配给计算机的IP地址),则会发生错误。
如果客户端应用程序不知道它要连接的IP地址(如果它是动态的),那么该如何连接到服务器?
如果网络客户端不知道IP地址,它们就无法连接到网络服务器。
然而,服务器具有动态IP地址并不一定排除客户端了解该地址的可能性。
即使在非动态情况下,客户端了解IP地址最常见的方法是询问DNS服务器,该服务器将文本名称解析为实际IP地址。有一些服务针对具有动态IP地址的服务或机器提供DNS名称分辨率;它们通常通过使用固定域名,将动态寻址服务器分配给子域来做到这一点。
例如,您可以从noip.com订阅服务,从中购买域名skaidar.noip.com。然后,客户端将查找该名称,正常的DNS解析将把其转换为服务器的IP地址。这种类型的服务要求您的服务器或某个相关的机器在动态分配的IP地址更改时积极更新提供程序的名称解析信息;不同的提供程序有不同的机制来执行此操作。
当然,一个人总是可以找到动态分配的IP地址,然后直接在客户端中输入它。 :)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接