【问题标题】:Java Socket - How to send and receive information between 3 points?Java Socket - 如何在 3 点之间发送和接收信息?
【发布时间】:2012-06-26 15:53:05
【问题描述】:

在我的应用程序中,多台 PC 将连接到服务器。服务器将接收消息然后发送到系统。系统可能会向服务器发回一条消息,而这条消息应该由服务器发送给 PC。基本上是这样的:

PC 0 --------------------> 服务器 ----> 发送 PC 信息到系统。
系统 ------> 发送消息到 PC 0 服务器 ----> PC 0

与 PC 1、2、3 等相同...

但是我该怎么做呢?我已经可以让 PC 消息到服务器和服务器到系统,如下所示:

这是从 ServerThread 运行的:

try {

    Socket socket = serverSocket.accept();

    if (socket != null) {

        clientList.add(new ClientThread(socket));
    }

} catch (IOException ex) {

    System.out.println(DEBUG
            + ": Failed creating client socket / "
            + ex.getMessage());
}

但是我怎么知道传入的套接字是要向服务器发送消息还是应该向 PC 发送消息?

【问题讨论】:

    标签: java sockets networking tcp ip


    【解决方案1】:

    您基本上是在实现即时消息传递,您的系统只是另一个端点(与 PC0 一起...)。如果您的服务器只是用作消息路由器,为什么不使用 XMPP 之类的东西。

    您可以将Smack 用于客户端解决方案,任何现成的XMPP 服务器都可以轻松满足您的需求。如果您需要自定义服务器,您可以选择基于 Java 的服务器之一,例如 Openfire。

    【讨论】:

      【解决方案2】:

      这种方法称为proxy。为了区分 clients(您的问题中的 PC)和 servers(系统),您需要保持来自客户端接受的连接,并且您发起到服务器的连接是分开的,但交叉引用(最简单的是一对一映射)。在客户端连接上获取消息,可选择转换/过滤,在相应的服务器连接上发送,反之亦然。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-03-31
        • 2014-11-04
        • 1970-01-01
        • 2016-08-01
        • 1970-01-01
        • 2013-06-07
        • 1970-01-01
        • 2015-06-28
        相关资源
        最近更新 更多