2011-09-11 54 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()。套接字已經連接到一個目標:在那之後改變本地出站接口的意義是什麼?

完全省略綁定步驟。路由表將確定使用哪個本地接口連接到目標。