• ベストアンサー

「javaプログラムについて」

javaプログラムでURLをスレッドを作って、たくさん読み込むと、 「address already in use: connect java」というエラーがでます。なぜでしょうか? 宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.1

 javaに限らず、TCP/IPでよそに接続する場合、クライアント側にもポート番号が必要になる。これは分かるな? で、OSによっても違いがあるが、一つのプログラムで利用できる(システムから提供される)ポート番号には数に限りがある方が普通だと考えられる。その数の具体的な調整方法などは分からんが、やはりプログラム側でソケット数を制御してあげるほうが良いのではと思う。  具体的には、URLクラスをVectorなどでプールにして、プール以上の同時接続をする場合はエラーを返すまたはブロックするなどの制御を組み込んであげよう。この場合、プールの中からサーバのアドレスだけ書き換えて再利用しようとしても、KeepAliveが邪魔をしてクライアントポート番号を開放していない可能性もあるので、意図的にクローズしてやるなどの細かな制御が必要だろう。

mizuki_ff
質問者

お礼

回答いただきありがとうございます。 正直、何を言っているのかさっぱりですが、とりあえず、一度にたくさん接続すると、エラーが出るということですね。 もう少し、クローズの仕方などいろいろ、調べてみます。 ありがとうございました。

関連するQ&A