Delphi App网络共享的问题,与公共和私有IP地址有关

时间:2020-02-29 22:45:21

标签: delphi tethering

我正在尝试使用Delphi(10.3.1)应用程序网络共享来连接在不同计算机上而不是在同一子网中运行的两个Windows应用程序。如果原始计算机同时具有公共IP地址和本地IP地址,则响应计算机似乎使用原始计算机的本地IP地址进行答复,这将失败。我已经在3台不同的计算机上进行了尝试-一个Amazon Web Services(AWS)EC2 Windows服务器实例(它既具有公共IP也具有私有IP),一台同时具有公共IP和私有IP的Windows 10计算机以及一个Windows 10台仅具有本地IP但在路由器上设置了端口转发设置的计算机将UDP / TCP端口2020-2100路由到该计算机-每台计算机都以相同的方式失败。数据包被阻止不是问题-我已经在所有防火墙上打开了相关的UDP / TCP端口-而是使用了错误的地址进行回复。

计算机1:公用IP = 100.5.195.74(路由器),专用IP = 192.168.1.183(Windows 10,NAT)
计算机2:公共IP = 54.175.128.251,私有IP = 172.30.0.213(AWS)

在计算机1上,我使用计算机2的公用IP地址作为目标来调用TetheringManager.DiscoverManagers。使用计算机2上的TTetheringLogItem,我可以登录和注销消息-记录的6条消息如下所示。尽管消息的内容(由计算机1组成)包括计算机1的本地IP地址,但前3条消息正确地将计算机1的公共IP地址记为数据包的来源。在最后3条消息中,包括当计算机2尝试答复计算机1时,它已删除计算机1的公用IP地址,而仅使用其专用IP地址。计算机1永远不会收到该消息,因为它没有发送到其公用IP地址。

是否可以告诉网络共享管理员使用消息来自的公共IP地址进行回复?更好的是,如果私有IP失败,它可以自动尝试使用公共IP。

2020/02/29 21:17:12: Log: DoOnReceiveData("100.5.195.74$2020") Data: "TetheringDiscoverManagers|192.168.1.183$2020|1|2020~"
2020/02/29 21:17:12: Log: DoOnReceiveData - Enqueue Command: "100.5.195.74$2020|TetheringDiscoverManagers\|192.168.1.183$2020\|1\|2020"
2020/02/29 21:17:12: Log: Net-In(100.5.195.74$2020): MyManager: Waiting -> TetheringDiscoverManagers|192.168.1.183$2020|1|2020
2020/02/29 21:17:12: Log: In(192.168.1.183$2020): 0: MyManager: Waiting -> TetheringDiscoverManagers|192.168.1.183$2020|1|2020
2020/02/29 21:17:12: Log: Out(192.168.1.183$2020): state: Waiting; Resp: <TetheringServerDiscovered|172.30.0.213$2020|1|{9816D745-81C2-4CD9-9F10-92DEB4FF7694}|TetheringManager|MyManager|Network~>
2020/02/29 21:17:12: Log: Net-Out(192.168.1.183$2020): state: Waiting; Resp: TetheringServerDiscovered|172.30.0.213$2020|1|{9816D745-81C2-4CD9-9F10-92DEB4FF7694}|TetheringManager|MyManager|Network~

1 个答案:

答案 0 :(得分:0)

在10.3.3(含)以下的所有版本中,这都是AppTethering实施的缺陷。无法解决。