【问题标题】:Indy tcp server - determining IP and Port of a server [closed]Indy tcp 服务器 - 确定服务器的 IP 和端口 [关闭]
【发布时间】:2011-08-04 13:28:34
【问题描述】:

如何使用 delphi 确定 IdTcpServer 的“互联网”IP 和端口?不是本地(127.0.0.1 或 192.168.0.1),而是公共互联网。

【问题讨论】:

  • 您是在家还是在办公网络上?你确定你甚至有一个公共IP?除非您在家并且使用 DSL 或电缆调制解调器直接连接到您的 PC 而不使用基于 NAT 的路由器,否则我非常怀疑您的 Windows PC 甚至没有。
  • 我在家里使用直接连接到 PC 的 DSL 或电缆调制解调器。
  • 您可能想阅读有关 ip v6 及其链接本地地址的信息,那么在未来您的应用程序将已经知道哪些 ip-v6 地址是公共的,哪些不是,在IPV4/V6 大转换,如果发生的话。
  • IP Chicken (ipchicken.com) 将为您提供您的互联网 IP 地址。

标签: delphi indy indy10


【解决方案1】:

端口和绑定

端口号很容易确定,如果你想检查 TIdTcpServer,你会注意到它有一个DefaultPort 属性和Bindings,所以如果你问它在哪个端口“接受连接”,它应该是 DefaultPort,或者在 Bindings 中配置的任何内容。激活会话后,该会话将在其自己的动态分配的端口号上处于活动状态。
如果在我的应用程序中,我将 IdTcpServer1.DefaultPort 设置为 90,然后在运行时转储绑定的内容,我会得到这个列表:

0.0.0.0:90
0:0:0:0:0:0:0:0:90

上面显示全零的列表是 IP 地址通配符表示法,告诉我我正在侦听端口 90 上所有可用的本地 IPV4 和 IPV6 地址。我用来转储上面列表的代码是:

procedure DumpBindings;
var
 n:Integer;
begin
   for n := 0 to IdTCPServer1.Bindings.Count-1 do begin
     with IdTCPServer1.Bindings[n] do begin
        Memo1.Lines.Add( ip+':'+IntToStr(Port) );
     end;
   end;
end;

公共 IP 地址

因此,对于这个问题的其余部分,让我们只返回 IP 地址,忽略端口:

您的计算机可能有一个以太网卡或一个无线网络适配器,或两者兼有,而这两者中的任何一个都可能有自己的私有地址。其次,如果您是网络管理员并且您已经给了它一个,那么您计算机中的任何网络适配器也可以有一个公共 IP。如果您没有配置您正在使用的网络,那么您在计算机上使用可公开访问的 IP 的可能性非常小。

如果您首先查看here,您的问题会更好,它告诉您如何确定您的计算机可访问的 IP(枚举所有本地 IP)。然后,您可以询问有关过滤该列表的问题,并通过丢弃私有不可路由地址来找到正确的列表。除了我敢打赌它在你的情况下不起作用......让我们找出原因......

如果您是普通的家庭或企业台式 PC 用户,在您的 PC 上使用私有 IP 地址,并且您的 Internet 连接是通过网络地址转换 (NAT) 进行的,那么答案是您的 PC 没有甚至有一个公共地址。

可以配置基于 NAT 的路由器来转发端口,但我不知道该转发的接收者有什么方法可以知道存在转发到您机器的端口。如果您需要帮助在家里配置基于 NAT 的 DSL 或电缆调制解调器以将端口转发到您的 Delphi 应用程序,那么在其他地方问这个问题会更好。

【讨论】:

  • 原来 OP 正在询问是否要查找他本地连接的 DSL 调制解调器的 IP 地址。所以链接的问题应该有效,并且由于他接受了答案,我猜它对他有用。其他未来的读者可能不会那么容易高兴。
猜你喜欢
  • 2012-10-29
  • 2010-10-22
  • 2011-05-19
  • 1970-01-01
  • 1970-01-01
  • 2015-01-29
  • 2014-03-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多