ここに私の方法があります
System.out.println("removeConnectedUser called. size connectedUsers="+connectedUsers.size());
if(connectedUsers.remove(conUser));
{
System.out.println("Removing user "+conUser.conn.getRemoteSocketAddress().toString()+"..."+connectedUsers.size());
writeUserAction(conUser.conn.getRemoteSocketAddress().toString(),"999");
try
{
conUser.conn.close();
}catch(IOException e){
System.out.println("Exception in removeConnectedUser");
}
ServerMainPanel.updateConnectedUsers(connectedUsers.size());
}
問題は、このメソッドが複数回呼び出される可能性があるため、必要以上に実行されることです。悪い通話をフィルタリングするために、if(connectedUsers.remove(conUser)); を追加しました。しかし、これは常に true を返します! コンソール出力です
Error in liveUpdate:java.net.SocketException: Connection reset by peer: socket write error
removeConnectedUser called. size connectedUsers=1
Removing user /10.175.33.179:4085 ...0
Error liveSecUpdate:java.net.SocketException: Socket closed
removeConnectedUser called. size connectedUsers=0
Removing user /10.175.33.179:4085 ...0
したがって、vector のサイズがゼロであっても、vector.remove は常に True を返します。1- size()=0 の場合、要素を削除することは不可能です。2- 接続しているクライアントが 1 つだけであるため、このベクターに同じオブジェクトの 2 つのインスタンスがあることは不可能です。