Java应用程序是否可以从多个IP地址连接到主机?

时间:2014-06-06 12:51:14

标签: java sockets

有没有办法从单个Java应用程序(在tomcat中托管)打开多个套接字连接,并且每个套接字看起来都来自不同的IP地址?

背景

我的团队正在计划如何与第三方系统集成,我们已经签约为该系统编写适配器,除了API之外我们没有太多细节文件:

doc指定基于TCP / IP的协议,允许客户端登录。

该文档指定只允许来自给定IP地址/用户的一个连接。虽然它是否允许来自具有不同用户名的单个IP地址的多个连接是不明确的。

我们需要打开一个连接池,因为我们的集成部分将充当代理,并且需要并行打开多个连接,我们希望拥有唯一的用户名就足够了,但正如我们所做的那样甚至没有提供测试系统,我们希望覆盖所有基地。

3 个答案:

答案 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)。然后您的代码可以调用代理实例,并将请求转发到目标服务器。