您的位置:首页 > 理论基础 > 计算机网络

让IdTCPServer&IdTCPClient的应用穿透NAT

2012-02-20 11:26 85 查看
让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大不一样。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: