java - 如何将客户存储在列表中

标签 java sockets networking arraylist network-programming

我正在运行一个服务器,我有一个客户端类型的数组列表 当客户端连接通过 ServerSocket.accept() 我将新的 Socket 传递给 arraylists 构造函数。这是构造函数中的所有内容

this.add(new Client(Socket client));

我的问题是,当客户端断开连接时,它会关闭套接字,但不会删除它在数组列表中的位置,并将所有内容都向下移动一位。所以 arraylist 不断变大。

我可以做什么/使用什么来解决这个问题?

有时我会运行将在所有客户端上执行的命令,这就是我将客户端存储在数组列表中的原因。

在服务器中存储客户端是否有更好的选择?

更新 1

类(class)处于开始阶段。实现的很少。到目前为止,答案中建议的 HashMap 选项最适合我。谢谢你的回复

最佳答案

有趣的问题。

你应该在这里使用散列映射.. 添加以对象作为值的客户端并使用一些键。每当您断开连接时,将其从 map 上移除。

一个很好的问题是什么应该是关键?可能是对象引用(取决于您的选择)或任何相对于客户端对象唯一的东西(必须有一些东西,如果没有,您可以轻松生成它)。

Map<Integer,Client> clientMap = new HashMap<Integer,Client>();

关于java - 如何将客户存储在列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29685186/

相关文章:

java - openjdk : unable to make field private final java. util.ArrayList 的 Hibernate 错误

C 套接字 : Comparison between pointer and integer terminal error

java - RMI 表中没有此类对象,服务器通信错误

java - 从 C3P0 连接池获取 DataSource/Connection

java - 使用 SmartPls 更改 Excel 文件中的工作表

python - 如何在根据目标地址发送消息之前确定源地址?

linux - 如何让dpdk识别Linux虚拟化的网卡?

c - C 中数据包的读/写处理示例

java - 打印字符串?

C# 查找套接字 ID?