2012-06-26 75 views
2

在我的应用程序中,多台PC将连接到服务器。服务器将收到消息,然后发送到系统。系统可能会将消息发送回服务器,并且该消息应该由服务器发送到PC。基本上是这样的:Java Socket - 如何在3点之间发送和接收信息?

PC 0 --------------------> Server ---->将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?

回答

0

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

2

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

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

相关问题