不带RMI注册表的Java RMI

不带RMI注册表的Java RMI,java,rmi,p2p,peer,Java,Rmi,P2p,Peer,我对java RMI相当陌生,我正在尝试创建一个对等2位torrent类应用程序,其中同一对等的多个实例可能位于同一台机器上。这意味着我需要能够在同一台机器上注册多个相同类型的远程对象。RMI注册表似乎只允许我在任何机器上实现一个远程对象,因为注册表无法区分它应该返回引用的对象。有没有一种方法可以绕过注册表,比如指定一个IP和端口,我知道另一个对等方正在暴露它的远程对象?如果不是的话,你知道我如何在同一台机器上创建同一对象的多个实例吗?您可以在不同的端口上启动多个rmi注册表,或者更好地多次绑定

我对java RMI相当陌生,我正在尝试创建一个对等2位torrent类应用程序,其中同一对等的多个实例可能位于同一台机器上。这意味着我需要能够在同一台机器上注册多个相同类型的远程对象。RMI注册表似乎只允许我在任何机器上实现一个远程对象,因为注册表无法区分它应该返回引用的对象。有没有一种方法可以绕过注册表,比如指定一个IP和端口,我知道另一个对等方正在暴露它的远程对象?如果不是的话,你知道我如何在同一台机器上创建同一对象的多个实例吗?您可以在不同的端口上启动多个rmi注册表,或者更好地多次绑定不同名称下的对象实例。但最好的方法可能是在代码中执行逻辑,并在每次需要时返回一个新的远程对象。例如,取决于参数:

public MyRemoteObject connect(String name) throws java.rmi.RemoteException {
    if("first".equals(name)){
         return firstinstance;
    }else if("new".equals(name)){
         return new MyRemoteObject();
    }
    ...
}

或者类似的…

我建议您忘记RMI-IMHO,因为这种技术不适用于您的用例


定义一个包含序列化和反序列化逻辑的网络协议,并将其用于在原始套接字连接上发送和接收数据。

注册表对每个对象类型的对象没有限制,但对每个绑定名称的对象有限制。使用一个新名称,就像morja推荐的那样。我同意你的建议,因为我已经习惯了C#.NET远程处理。我认为有一个选项与Java RMI类似。看来,插座将是最好的方式,但我不熟悉他们和这个项目的学校是由于3天。(不,我没有拖延,只是我的最后一次尝试(在C++中)没有成功,所以尝试了更高级的语言)非常感谢您的输入:)