java - 在 Java 中建立多客户端/服务器 TCP 连接

标签 java multithreading sockets networking tcp

我正在尝试用 Java 创建一个多客户端/服务器应用程序。我遇到了一些问题,因为我的线程似乎纠缠在一起......这就是我正在尝试做的事情。

  1. 我有一个服务器类,它通过使用这段代码来接受客户端:

    同时(真){ Socket套接字 = serverSocket.accept(); }

  2. 我的服务器应该记住已连接的客户端,因此我使用该套接字创建一个名为 ClientThread 的新线程,并将该线程放置在服务器上的列表中

  3. 该线程监听从客户端发送的命令对象。如果它收到一个命令,它需要将其发送到服务器实例以进行进一步处理(而不是在该客户端线程上创建新的服务器实例)。我尝试通过在创建该线程时将服务器实例添加到该线程来实现此目的。 (这样对吗?)

  4. 我的服务器还应该能够随时将对象发送回客户端(1 个或多个)。我试图通过使用保存在 ClientThread 中的 socket.getOutputStream() 来做到这一点

我应该如何组织我的线程,以便每个客户端都不断地监听从服务器接受的对象,并且它们可以随时向服务器发送对象。

我知道这并不是一个具体的问题,但如果您知道一些可能对这个用例有帮助的信息或教程,我将非常感激。

顺便说一句:我知道如何创建套接字并发送(可序列化)对象等等。我只是不知道如何组织一切

最佳答案

您似乎将线程和对象缠结在一起。我愿意

a) 确保您没有在任何地方扩展 Thread 或调用您的对象 XxxxThread。使用 ExecutorService 来管理线程是一个好主意。

b) 有一个响应客户端命令的简单模型,例如每个客户端线程读取一个任务,然后执行一个任务。

c) 为每个连接提供一个包装器,例如使用 sendMessage 方法。

关于java - 在 Java 中建立多客户端/服务器 TCP 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16526017/

相关文章:

java - RRD4J fetch 检索奇怪的值

Java:可以发送和接收UDP数据包,但接收到的数据是乱码

android - Python 等效于 Java DataInputStream.readUTF()

java - 从异步线程访问Android Activity 堆栈?

java - RandomStringUtils.randomAlphanumeric(30) 是有效的 GUID 策略吗?

Java 枚举与静态常量

java - 硬币兑换 : dynamic programing O(N) complexity

MySql 连接丢失 Delphi

c - 打开 MP 性能不佳/令人困惑

c# - 如何在已经运行的线程上执行函数?