Java:重用不同IP的绑定套接字?

时间:2011-09-11 20:30:13

标签: java sockets bind reusability

我想做那样的事情:

public void  myFun (String  tIps [])
{
    Socket  s = new Socket ();
    s.connect (new InetSocketAddress (serverIp, 80), 1000);

    for (int  i = 0 ; i < tIps.length ; ++i) 
    {
        // Rebind the socket with another Ip
        s.bind (new InetSocketAddress (tIps [i], 0));

        /*
        *   use the socket
        */
    }

    s.close ()
}

但我收到此错误:“java.net.SocketException:已经绑定”。 我试图使用s.setReuseAddress(true),但它没有改变任何东西。 是否有任何解决方案可以避免为每个请求打开一个新套接字,这很长?

谢谢!

2 个答案:

答案 0 :(得分:1)

这不是setReuseAddress的用途。该函数对应于经典SO_REUSEADDR,这与重新使用其他进程最近一直在监听的端口有关。

Java无法做你想做的事。

答案 1 :(得分:0)

这不是bind()所针对的。套接字已经连接到目标:之后更改本地出站接口的重点是什么?

完全省略绑定步骤。路由表将确定用于连接目标的本地接口。