Java: повторно использовать связанный сокет с другим IP? - PullRequest
1 голос
/ 12 сентября 2011

Я хочу сделать что-то вроде этого:

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 ]

1 голос
/ 12 сентября 2011

Это не то, для чего setReuseAddress. Эта функция соответствует классической SO_REUSEADDR, которая связана с повторным использованием порта, который недавно прослушивался другим процессом.

В Java нет способа делать то, что вы хотите.

0 голосов
/ 13 сентября 2011

Это не то, что bind() для того или другого.Сокет уже подключен к цели: какой смысл менять локальный исходящий интерфейс после этого?

Просто пропустите шаг привязки.Таблицы маршрутизации определят, какой локальный интерфейс использовать для подключения к цели.

...