2012-02-18 1 views
0

私はJavaでいくつかのネットワークプログラミングをやっています。ループではソケットを開き、データを送信して閉じます。しかし、私は "接続が既に使用中"の例外を取得します。私はループの各繰り返しで同じポートを使用するので、起こると思います。 OS(Ubuntu 11.10)がソケットを閉じてポートを解放するのにどれくらい時間がかかりますか? (未送信データがある場合など、最大3分まで)のおかげJavaでclose()メソッドを呼び出した後、OSがソケットを閉じるのにどれくらいかかりますか?

この

while(true){ 
      Socket clientSocket = new Socket("localhost", 5000); 
      PrintWriter outToServer = new PrintWriter(clientSocket.getOutputStream(),true);  
      outToServer.println ("Hi") ; 
      clientSocket.close(); 
     } 
+2

おそらくhttp://stackoverflow.com/questions/4708649/getting-java-net-bindexception-address-already-in-use-when-trying-to-do-rapidに関連する –

答えて

2

のような単純化されたコードの外観は、それは非常に時間がかかることができ

あなたのケースでは、別のローカルポートを使用しています(同じリモートポートは問題ではありません)ので、問題ではありません。

ところで、新しい接続を作成するのはかなり高価です。毎回新しい接続を開くのではなく、接続を再利用しようとします。上記の例では、1000倍も高速になる可能性があります。 ;)

+1

ありがとうございます私の実際のコードはローカルホストではなく、ループの中でいくつかのサーバソケットに同じデータを送る必要があります。そのため、毎回新しい接続を開きます。たとえば、utorrentのようなBittorrentクライアントでは、コンピュータ上のさまざまなポートとの接続を多数開いていますか? – ePezhman