我有三个实体:A,B和C.A是服务器,B和C是客户端。
A是使用java.net
我会实现一种通信,其中B向A发送消息,A向C发送消息,C发送消息B.我的问题是:客户端C必须是服务器,或者必须只是客户端转发消息?
public class ServerA{
public static void main(String[] args){
boolean listening = true;
int port_number = 8888;
try{
ServerSocket ss = new ServerSocket(port_number);
System.out.println("Waiting for incoming connection...");
while(listening){
new Thread(new ServerThread(ss.accept())).start();
}
}
catch(IOException ioe){ioe.printStackTrace();}
}
}
public class ServerThread implements Runnable{
@Override
public void run(){
}
}
答案 0 :(得分:1)
您是否有任何特殊原因可以像这样设计您的架构?
回答你的问题:让我们思考一下。从客户端C向客户端B发送消息需要什么?你想怎么实现它?您在评论中提到了一个频道 - 但您在两个客户端之间打开“频道”的确需要什么?你需要知道它(客户端B)的位置和端口客户端B正在监听消息(最坏的情况是每个客户端知道所有/其他客户端,更好的方法是查询主服务器以获取其他客户端列表/与所有客户有一些注册表)。此外,显然,客户端B需要打开一个端口并等待消息。
因此,基本上客户端C查询服务器A的某些内容,获取响应,然后(通过套接字)向客户端B发送消息,客户端B必须正在监听(就像客户端A一样)。这基本上就是服务器客户端所做的事情。
如果您知道它将在LAN或类似的东西中,那么您可以考虑使用UDP而不是TCP,但是您需要自己管理更多的东西,因为它不那么可靠。
这种架构让我想起了更多的点对点网络(其中所有“客户端”更像是客户端+服务器组合),单个服务器可以从某个地方获取数据/进行一些计算。