分享

让IdTCPServer&IdTCPClient的应用穿透NAT

 ZLM_图书馆 2014-03-07

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大不一样。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多