我有一个Java应用程序在服务提供程序中注册一个服务器组件,然后将服务名称发送给客户端。客户端使用服务名称从服务提供者处获取服务器的地址。但是,服务器有几个接口,客户端只能访问其中一个接口,所以服务必须使用正确的IP进行注册。我们通过广播发现了客户端,因此我拥有客户端IP和计算机网络接口的枚举。如何将IP与接口相匹配,不知道客户端IP的网络掩码是什么?Java:我如何获得可以到达远程IP的本地接口的IP?
自发地我想象把所有的地址都整合起来,用他们的网络掩码捣毁本地ips并寻找'最佳匹配',但我想知道是否有更好的方法?
(这是一个企业(TM)解决方案,使切割出的服务提供商是不是一种选择,至少不会瓦特/ OA政治运动第一;))
底层操作系统应该照顾大多数低级套接字的东西。只需创建套接字并调用get本地地址方法即可。作为最后的手段,通过枚举本地地址,您可以创建套接字,将它们绑定到套接字上,然后查看是否可以连接到您的客户端。但'Socket(clientIP,port).getLocalAddress()'应该可以工作。 – Allen 2010-06-29 17:51:42
只要网络上的路由是对称的,就应该可以工作。如果不是用于向客户端发送数据报的本地IP可能与客户端有权访问的IP不同。 – 2010-06-30 05:25:32