首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何与多线程服务器上的所有线程通信?

如何与多线程服务器上的所有线程通信?
EN

Stack Overflow用户
提问于 2014-02-23 18:05:14
回答 1查看 804关注 0票数 0

好的。我试图掌握一些多线程Java概念。我知道如何设置多功能/服务器解决方案。服务器将为每个连接的客户端启动一个新线程。

概念上是这样..。

Server.java:中的循环

代码语言:javascript
运行
复制
while (true) {
  Socket socket = serverSocket.accept();
  System.out.println(socket.getInetAddress().getHostAddress() + " connected");
  new ClientHandler(socket).start();
}

ClientHandler.java循环是:

代码语言:javascript
运行
复制
while(true)
{
    try {
         myString = (String) objectInputStream.readObject();
    } 
    catch (ClassNotFoundException | IOException e) {
        break;
    }   

    System.out.println(myClientAddress + " sent " + myString);

    try {
        objectOutputStream.writeObject(someValueFromTheServer);
        objectOutputStream.flush();
    } 
    catch (IOException e) {
        return;
    }
}

这只是一个概念来把握这个想法。现在,我希望服务器能够同时向所有客户端发送相同的对象或数据。

因此,不知何故,我必须让服务器与每个线程进行对话。假设我希望服务器生成具有一定时间间隔的随机数,并将它们发送给客户端。

是否应该使用线程可以访问的服务器中的属性?是否有一种方法可以从主线程调用正在运行的线程中的方法?我不知道从这里往哪里走。

奖金问题:我也有另外一个问题..。在这段代码中可能很难看到。但是我希望每个客户端都能够独立地接收来自服务器的消息并向服务器发送消息。现在我可以让客户站起来等我的客户给我送点东西。发送后,客户端将等待服务器发送一些它将提供给gui的内容。你可以看到我的ClientHandler也有这个问题。

这意味着,当客户端等待服务器发送一些东西时,它不能向服务器发送任何新的内容。另外,当客户端等待gui给它发送一些东西时,它不能从服务器接收。

我只制作了一个服务器/客户端应用程序,它使用服务器处理从客户端接收到的数据,并将处理过的数据发回。

有人能用这个指点我的方向吗?我想我需要帮助如何从概念上思考。我要两种不同的ClientHandlers吗?一张给伊斯特拉姆,一张给外流?我在黑暗中摸索着。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-24 22:59:48

“是否有一种方法可以从主线程调用正在运行的线程中的方法?”

不是的。

解决问题的一个简单方法是让“服务器”线程将广播发送到每个客户端。与其简单地创建新的客户端对象并让它们离开(如您的示例所示),它还可以将所有的活动客户端对象保存在一个集合中。当发送广播消息时,它可以遍历所有客户端对象,并对每个对象调用一个sendBroadcast()方法。

当然,您必须将每个客户端线程对客户端对象outputStream的使用与服务器线程对相同流的使用同步。您还可能需要处理不能持久的客户端连接(它们的客户端对象必须以某种方式从集合中删除)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21972183

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档