2016-08-23 52 views
1

我正在开发一个Java应用程序,它将侦听本地端口与另一个程序进行通信。通常它会听,比如说127.0.0.1:8808。Java以编程方式获得REAL环回地址

我的一个客户报告说他们使用的是Citrix环境,它就像MS远程桌面环境一样,多个用户可以同时登录同一台机器。如您所知,此类终端服务器用户共享一个环回地址,也就是说,只有第一个用户运行我的应用程序才能成功绑定到127.0.0.1:8808,其他人将收到资源冲突错误。

我的客户端尝试通过启用“虚拟回送”来解决此问题,此设置可以自动为不同的用户分配不同的回送地址,每个用户都将获得127.0.0.2-127.0.0.255作为回送地址而不是全部127.0.0.1这听起来像是这种情况的完美解决方案。

一个测试显示虚拟环回对于Chrome和IE等其他程序都很好,TCPView工具显示任何到本地主机的连接都会重定向到127.0.0.2,除了我的程序。

我想这个问题可能是因为我在代码中使用了固定地址127.0.0.1,但我没有一个确认的环境。所以我的问题是:在这种情况下是否有任何Java方法可用于获取REAL环回地址,因此我可以将其绑定到正确的地址?

在此先感谢!

+0

127.0.0.1是真正的环回地址。您可以使用其他地址作为循环返回,但这是大多数人使用的地址。 –

+0

你做了一些研究;像http://support.citrix.com/article/CTX209237 – GhostCat

+0

@GhostCat谢谢,那可能是根本原因,我会请我的客户端试一试。 –

回答

0

指定localhost和Citrix将处理剩下的

为了使虚拟环回地址提供给运行在 会话中使用虚拟环回策略的使用 环回地址进行进程间通信的应用程序应用。启用此虚拟IP策略设置允许每个会话都有自己的环回 地址进行通信。当应用程序在Winsock调用中使用本地主机 地址(127.0.0.1)时,虚拟环回功能 只是将127.0.0.1替换为127.XXX,其中XXX是会话ID + 1的 表示形式。例如, 7 的会话ID是127.0.0.8。如果会话ID超出 第四个八位字节(大于255),则该地址将转到下一个八位字节 (127.0.1.0),最大值为127.255.255.255。

除了在程序列表中指定哪些 进程使用该功能外,虚拟环回功能不需要任何其他 配置。虚拟环回不依赖 虚拟IP,因此不需要Microsoft服务器配置即可启用 虚拟环回。

https://docs.citrix.com/en-us/xenapp-and-xendesktop/xenapp-6-5/xenapp65-w2k8-wrapper/ps-publishing-landing-page/ps-pub-virtual-ip-why-use-v2.html

相关问题