有没有办法从单个Java应用程序(在tomcat中托管)打开多个套接字连接,并且每个套接字看起来都来自不同的IP地址?
背景
我的团队正在计划如何与第三方系统集成,我们已经签约为该系统编写适配器,除了API之外我们没有太多细节文件:
doc指定基于TCP / IP的协议,允许客户端登录。
该文档指定只允许来自给定IP地址/用户的一个连接。虽然它是否允许来自具有不同用户名的单个IP地址的多个连接是不明确的。
我们需要打开一个连接池,因为我们的集成部分将充当代理,并且需要并行打开多个连接,我们希望拥有唯一的用户名就足够了,但正如我们所做的那样甚至没有提供测试系统,我们希望覆盖所有基地。
答案 0 :(得分:2)
是的,如果您有不同的本地接口,则可以在创建套接字时指定要将套接字绑定到哪个接口。请参阅:http://docs.oracle.com/javase/7/docs/api/java/net/Socket.html#Socket(java.net.InetAddress,%20int,%20java.net.InetAddress,%20int)
当然,如果您的流量在前往其他主机的路上经过任何类型的防火墙,那么您的数据包上的源IP地址很可能会被NAT转换为其他内容,很可能全部你发送的数据包看起来好像来自同一个地址。
答案 1 :(得分:0)
据我所知,单个网络接口可能有多个IP地址。对于Unix系统和Windows,我也非常肯定,无论是物理网卡还是虚拟网卡。
但是它们必须全部在系统级别声明,并且您的java应用程序必须管理它必须用于每个传出连接的地址。
要在Windows上为网络接口添加新地址,请进入该界面的配置并查找高级面板。详细信息可能因Windows版本而异。
答案 2 :(得分:0)
如果我是你,我会将应用程序(或至少是调用者模块)部署到一台单独的机器上(物理上或VPS上)。
其他(但类似)解决方案:为API实施代理,并将这些小型实例部署到不同的计算机(同样,物理或VPS)。然后您的代码可以调用代理实例,并将请求转发到目标服务器。