Java 来自同一台机器的不同IP地址

Java 来自同一台机器的不同IP地址,java,networking,dns,Java,Networking,Dns,我有一个客户端服务器设置。客户端连接到服务器并询问下一步执行哪个程序。服务器收到请求后,使用下面返回“127.0.0.1”的代码块检查套接字另一端的主机名 在获得程序名后,客户端创建一个进程,该进程也尝试连接到服务器,但这次上述调用返回不同的地址。“mypc.foo.com”在此处屏蔽域名 这种行为困扰着我,因为我无法查找hashmap,在那里我存储了按机器ip分组的所有进程详细信息 这是java查找实现中的错误还是我遗漏了什么。请建议其他方法执行此查找I beleive socket.getI

我有一个客户端服务器设置。客户端连接到服务器并询问下一步执行哪个程序。服务器收到请求后,使用下面返回“127.0.0.1”的代码块检查套接字另一端的主机名

在获得程序名后,客户端创建一个进程,该进程也尝试连接到服务器,但这次上述调用返回不同的地址。“mypc.foo.com”在此处屏蔽域名

这种行为困扰着我,因为我无法查找
hashmap
,在那里我存储了按机器ip分组的所有进程详细信息


这是java查找实现中的错误还是我遗漏了什么。请建议其他方法执行此查找

I beleive socket.getInetAddress()返回您自己的地址,因此基本上总是127.0.0.1。尝试使用socket.getRemoteSocketAddress()-获取另一方的ip地址

不过,使用IP地址匹配不同的用户通常是个坏主意。首先,它们可以位于某个网络中或防火墙后,您可以从多个客户端获得来自同一IP地址的请求。此外,您也不能保证它是静态或动态IP。此外,如果您的应用程序运行在具有奇怪路由的奇怪网络设置中,您可能最终会从路由器IP地址获取所有请求


更好的设计是在服务器和客户端之间共享一些令牌,并将其用于标识。听起来熟悉吗?例如,http会话就是这样完成的;)

是啊!我想到了。。但是我们也可以欺骗它,对吗?@MadhusoodanP所以你担心客户端欺骗他的令牌,但不担心IP地址操纵?如果是这样的话,那就不太合适了。但这增加了管理令牌的额外复杂性,而且服务器有时还会连接回客户端以终止进程(是的,首先连接的客户端也会侦听端口:P)。所以我相信使用IP地址是更好的方法。(请纠正我)这没关系,但它增加了对基础设施的依赖性。假设您有一个本地网络,其中有5台机器从同一路由器连接到internet。您的服务器位于internet上的远程位置。所有这些机器都会向您显示它们的路由器/共享IP地址或本地网络地址,在这两种情况下都不适用于您。此外,如果您的网络中有一些硬件防火墙或负载平衡器,或者路由器设置不好,或者其他任何东西,您将始终获得它们的IP。在这种情况下,如果需要连接回token,那么使用token也不会有多大的好处。好吧,让我再进行一层抽象
socket.getInetAddress().getCanonicalHostName();