gpt4 book ai didi

delphi - Indy tcp 服务器 - 确定服务器的 IP 和端口

转载 作者:行者123 更新时间:2023-12-03 15:45:31 25 4
gpt4 key购买 nike

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

最佳答案

端口和绑定(bind)

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

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;

公共(public) IP 地址

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

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

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

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

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

关于delphi - Indy tcp 服务器 - 确定服务器的 IP 和端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6942303/

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