在这里我有我的方法
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.remove 始终返回 True,即使向量的大小为零。1- 如果 size()=0,则不可能删除元素,2- 不可能我在这个向量中有两个相同对象的实例,因为我只连接了一个客户端