2011-09-11 15 views
1

私はそのような何かやりたい:Java:異なるIPでバインドされたソケットを再利用しますか?

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)を使用しようとしましたが、何も変更しませんでした。 リクエストごとに新しいソケットを開くことを避けるための解決策はありますか?これは非常に長いですか?

ありがとうございます!

+1

なぜこのようにソケットを再利用しようとしていますか?バッファに入っていても読み込まれていないデータがある場合は、そのデータで何が起きると思いますか?通常、接続ごとに新しいソケットを作成します。 –

答えて

1

これは、setReuseAddressが対象ではありません。この機能は、古典的なSO_REUSEADDRに対応しています。これは、他のプロセスが最近リッスンしているポートを再使用することに関連しています。

あなたが望むことをJavaで行う方法はありません。

0

これは、bind()のいずれにも該当しません。ソケットはすでにターゲットに接続されています。その後、ローカルアウトバウンドインターフェイスを変更する点は何でしょうか?

バインドステップを完全に省略してください。ルーティングテーブルは、ターゲットに接続するために使用するローカルインターフェイスを把握します。