- ベストアンサー
JAVAのソケット通信の接続数について
JAVAのソケット通信の接続数について ServerSocket server= new ServerSocket( port ); server.setSoTimeout( 4000 ); Socket socket = server.accept();//クライアントからの接続をまつ 以上のコードを使っていますが、クライアントからの接続数を調べる方法はないでしょうか?
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
ServerSocketには分からんと思われます。acceptした受け口への接続が確立したらSocket socketの方にいくので。acceptから取得されたSocket数-acceptから取得された後でクローズされたSocket数を自分でカウントするしかあるまいて。 さて、このようなサーバサイドソケットプログラムは普通はacceptから制御が返るたびにスレッドを新たに作るかselectするようにすると思うが、select法なんて普通使わない(あんもち調べ)のでマルチスレッドの時に別スレッドでクローズされたのをどう知るかという事になるかと思う。 やり方はいくつかあるが、一番手っ取り早いのはArrayList<Socket>にacceptしたSocketを全部突っ込んで一つ一つ状態を見ながらカウントするかクローズしたらリストから削除というのが楽で得かな。もちろんスレッドセーフな作りにする必要はある。 ところで、前述の通りacceptした受け口への接続が確立しない限りacceptは制御を返さないので、バックログの数はどうしても分からないと思われる。