我目前正在从事一个小项目,该项目管理我正在帮助运行的暑期项目的出勤率。RMI 服务器从办公室运行,并使用以下代码为其设置了特定端口:
Registry registry = LocateRegistry.createRegistry(4051);
RemoteManager stub = (RemoteManager) UnicastRemoteObject.exportObject(theServer, 4051);
registry.rebind(SERVER_NAME, stub);
wheretheServer
是对将用作系统服务器的对象的引用,并且SERVER_NAME
只是String
用于表示服务器的静态变量。如图所示,注册表将服务器绑定到端口4051
,以便客户端可以查询它。现在我正在处理服务器和多个客户端实例之间的交叉通信(12 位教师运行相同的客户端程序),目前设置为客户端将stubs
自己发送到服务器以进行客户端注册。
public void registerClient(INTERFACE_Client teach) throws RemoteException {
.
.
.
}
whereINTERFACE_Client
扩展了Remote
接口,并通过调用将客户端发送下来:
server.registerClient((INTERFACE_Client) UnicastRemoteObject.exportObject(this, 4052));
我只是选择了端口4052
,因为我不知道自己在做什么。我也没有将存根绑定到注册表。是一个好方法吗?因为我已经对客户端端口进行了硬编码,所以所有 12 位教师都将使用端口 4052(至少我是这么看的)从他们各自的客户端实例中导出对象。端口应该随机化吗?我应该不包括端口(有一种方法也不需要)?任何有用的提示将不胜感激。
作为免责声明,我确实需要在服务器中引用客户端,以便办公室的人可以向老师发送消息。(服务器 -> 客户端通信)。客户端已经拥有对服务器的引用,因为它可以在注册表中查找它。
有什么建议吗?