gpt4 book ai didi

java - 如何获取没有引用变量的套接字对象?

转载 作者:行者123 更新时间:2023-12-02 09:26:33 26 4
gpt4 key购买 nike

我一整天都在想这个问题,我真的不认为标题是否正确,但现在,让我解释一下我的情况:我正在开发一个项目,一个用 Java 为客户端制作的服务器德尔福。连接良好,多个客户端拥有自己的线程,I/O 工作良好。客户端将字符串发送到我用 BufferedReader 读取的服务器。根据服务器接收到的保留字,它会采取行动。在客户端发送字符串之前,它会将信息插入到 SQL Server 数据库中,以便服务器在通过套接字获取订单/命令后可以检查它。服务器获取数据库中的信息,对其进行处理,并将其发送到……我们称之为“黑暗面”。

当交易完成,信息被发送到暗方时,服务器将信息插入......咳咳,暗信息到数据库表中,以便客户端可以获取它所请求的内容。但是,我需要向客户报告! (“哟,再检查一下数据库,兄弟,你想要的就在那里:3”)。

连接、套接字是在其他类中进行的。不是我想用来回答客户端的那个,所以如果我没有套接字,我就没有 OutputStream,我需要对此进行回复。该类是处理信息并将其发送到黑暗面的类,它将处理成百上千个交易。

我的问题在这里:我无法向客户端报告已完成的情况,因为我在该类中没有套接字引用。我实例化客户端线程如下:

new Client(socket).start(); 

没有引用变量的对象,但是,我可以选择:在建立新连接时将套接字及其 IP 存储在 HashMap 对象中,如下所示:

sockets.put(newSocket.getInetAddress().getHostAddress(), newSocket);

然后我可以调用这样的静态方法来获取套接字(这样我就可以获取 OutputStream 和答案):

 public static Socket getSocket(String IP) {

Socket RequestedSocket;
RequestedSocket = sockets.get(IP);

return RequestedSocket;
}

但我希望你告诉我是否有更好的方法来做到这一点,比将所有这些套接字存储在列表/ HashMap 中更好。我怎样才能获得那些没有引用变量的对象?或者也许这是一个很好的方法,我只是想超越限制。

P.S.:我尝试将 Client 对象存储在数据库中,并序列化它们,但套接字无法序列化。

谢谢。

最佳答案

这对您来说是一个设计问题。您需要在某个地方跟踪它们,一种解决方案可能是简单地创建一个单例类 [SocketMapManager] 来保存 HashMap ,以便您可以从其他类静态访问它。 http://www.javaworld.com/javaworld/jw-04-2003/jw-0425-designpatterns.html

关于java - 如何获取没有引用变量的套接字对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16345459/

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