如何让IdTCPServer&IdTCPClient的应用穿透NAT
2个回答
2016-02-06
展开全部
让IdTCPServer&IdTCPClient的应用穿透NAT?
2007-03-15 22:35:28| 分类: delphi程序备忘 |字号 订阅
IdTCPServer拥有公网IP和开放的端口,
IdTCPClient位于NAT之后,没法端口映射,
但是由IdTCPClient主动发起连接,连接之后互相传递文件.
在IdTCPClient的属性里BoundIP和BoundPort不用填,使用如下代码就能穿透NAT连接IdTCPServer:
IdTCPClient.Host := ‘0.0.0.0’;//IdTCPServer公网IP
IdTCPClient.Port := 0; //IdTCPServer的端口
try
IdTCPClient.Connect();
except
IdTCPClient.Disconnect;
exit;
end;
要注意的是,IdTCPServer一定要在拥有公网IP的机子上运行,这样可以使得世界任何地方的电脑用上述代码就能跟IdTCPServer相连接,
连接上后,可以用IdTCPServer的OnConnect取得IdTCPClient经过NAT转换后的IP和Port,代码如下:
procedure TForm1.IdTCPServer1Connect(AThread: TIdPeerThread);
begin
IP := AThread.Connection.Socket.Binding.PeerIP ;
Port := AThread.Connection.Socket.Binding.PeerPort;
end;
使用IdTCPServer的OnConnect获得的IP和Port才能与IdTCPClient通讯。
你会发现OnConnect里获得的IP和Port和未经过NAT转换后的IdTCPClient的机子的IP和Port大不一样。
2007-03-15 22:35:28| 分类: delphi程序备忘 |字号 订阅
IdTCPServer拥有公网IP和开放的端口,
IdTCPClient位于NAT之后,没法端口映射,
但是由IdTCPClient主动发起连接,连接之后互相传递文件.
在IdTCPClient的属性里BoundIP和BoundPort不用填,使用如下代码就能穿透NAT连接IdTCPServer:
IdTCPClient.Host := ‘0.0.0.0’;//IdTCPServer公网IP
IdTCPClient.Port := 0; //IdTCPServer的端口
try
IdTCPClient.Connect();
except
IdTCPClient.Disconnect;
exit;
end;
要注意的是,IdTCPServer一定要在拥有公网IP的机子上运行,这样可以使得世界任何地方的电脑用上述代码就能跟IdTCPServer相连接,
连接上后,可以用IdTCPServer的OnConnect取得IdTCPClient经过NAT转换后的IP和Port,代码如下:
procedure TForm1.IdTCPServer1Connect(AThread: TIdPeerThread);
begin
IP := AThread.Connection.Socket.Binding.PeerIP ;
Port := AThread.Connection.Socket.Binding.PeerPort;
end;
使用IdTCPServer的OnConnect获得的IP和Port才能与IdTCPClient通讯。
你会发现OnConnect里获得的IP和Port和未经过NAT转换后的IdTCPClient的机子的IP和Port大不一样。
Storm代理
2023-07-25 广告
2023-07-25 广告
StormProxies是一家国内优质海外HTTP代理商,拥有一个庞大的IP资源池,覆盖200多个地区,IP数量大且匿名度高。其优点还包括超高并发、稳定高效、技术服务等特点,同时提供HTTP、HTTPS以及SOCKS5协议支持。此外,Sto...
点击进入详情页
本回答由Storm代理提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询