端口和绑定
端口号很容易确定,如果你想检查 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 应用程序,那么在其他地方问这个问题会更好。