Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi Indy tcp服务器-确定服务器的IP和端口_Delphi_Indy_Indy10 - Fatal编程技术网

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

Delphi Indy tcp服务器-确定服务器的IP和端口,delphi,indy,indy10,Delphi,Indy,Indy10,如何使用delphi确定IDTCP服务器的“internet”ip和端口?不是本地的(127.0.0.1或192.168.0.1),而是公共的internet端口和绑定。 端口号很容易确定,如果您想检查TIdTcpServer,您会注意到它有一个DefaultPort属性和Bindings,因此如果您询问它“在哪个端口上接受连接”,它应该是DefaultPort,或者是Bindings中配置的任何端口。一旦会话处于活动状态,该会话将在其自己的动态分配端口号上处于活动状态。 如果在我的应用程序中,

如何使用delphi确定IDTCP服务器的“internet”ip和端口?不是本地的(127.0.0.1或192.168.0.1),而是公共的internet端口和绑定。

端口号很容易确定,如果您想检查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。如果您没有配置正在使用的网络,那么在您的计算机上使用公共可访问的IP的可能性非常小

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

如果你是一个普通的家用或商用台式电脑用户,在你的电脑上使用一个专用IP地址,并且你的互联网连接是通过网络地址转换(NAT)实现的,那么答案是你的电脑甚至没有公共地址


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

您是在家还是在办公网络上?你确定你有公共IP吗?除非您在家使用DSL或电缆调制解调器直接连接到您的电脑,而没有基于NAT的路由器,否则我高度怀疑您的Windows电脑是否有。我在家使用DSL或电缆调制解调器直接连接到电脑。您可能想了解ip v6及其链接本地地址,然后,在IPV4/v6大切换之后,如果发生这种情况,未来你的应用程序将已经知道哪些ip-v6地址是公共的,哪些不是公共的。ip Chicken()将为你提供互联网ip地址。事实证明,OP正在询问如何查找其本地连接的DSL调制解调器的ip地址。既然他接受了答案,我猜这对他来说是可行的。其他未来的读者可能不会那么容易高兴。