gpt4 book ai didi

Java多客户端服务器应用程序-如何组织套接字

转载 作者:行者123 更新时间:2023-12-01 15:28:36 24 4
gpt4 key购买 nike

_嘿,我有一个问题。我想编写具有多个聊天、房间等的应用程序。现在我的服务器遇到了一些麻烦。我的想法是将客户端数据存储在 ClientSocket 类的 Vector 中。

ClientSocket 类将如下所示:

public class ClientSocket {
int client_id;
Socket socket;
}

在主服务器线程上:

ServerSocket serverSocket;
Vector<ClientSocket> sockets;

想法是:当建立新连接时,创建一个新线程,传递套接字 vector 作为参数,生成玩家id,迭代 vector 元素,检查client_id是否存在,如果不存在,则设置id,如果存在,生成下一个并执行相同的操作。

问题出在哪里?我担心同步。如果两个客户端同时到达,并且 vector 大小同时发生变化,会发生什么?我这样做正确吗?也许有更好的想法来组织它?

提前致谢马尔辛

//编辑

我的意思是这种情况,但我想我会使用 Peter Lawrey 解决方案:

Situation

最佳答案

由于您需要通过 client_id 查找客户端,因此我将使用 Map。如果您使用 ConcurrentMap,它将是线程安全的。

ConcurrentMap<Integer, Socket> socketByClientIdMap = new ConcurrentHashMap<>();

// check if a client exists already,
if (socketByClientIdMap.containsKey(clientId))

// add a socket by client id.
socketByClientIdMap.put(clientId, socket);

// get a socket for a client_id
Socket s = socketByClientIdMap.get(clientId);

关于Java多客户端服务器应用程序-如何组织套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9859205/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com