本地Java RMI连接错误

时间:2016-02-01 10:15:24

标签: java rmi

我不知道为什么,但我收到了这个错误:

java.rmi.ConnectException: Connection refused to host: 127.0.1.1; nested exception is: 
    java.net.ConnectException: Connexion refusée
    at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:619)
    at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:216)
    at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:202)
    at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:130)
    at java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(RemoteObjectInvocationHandler.java:227)
    at java.rmi.server.RemoteObjectInvocationHandler.invoke(RemoteObjectInvocationHandler.java:179)
    at com.sun.proxy.$Proxy0.getNbMots(Unknown Source)
    at tp1.Serveur.main(Serveur.java:15)
Caused by: java.net.ConnectException: Connexion refusée
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
    at java.net.Socket.connect(Socket.java:589)
    at java.net.Socket.connect(Socket.java:538)
    at java.net.Socket.<init>(Socket.java:434)
    at java.net.Socket.<init>(Socket.java:211)
    at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(RMIDirectSocketFactory.java:40)
    at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(RMIMasterSocketFactory.java:148)
    at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:613)
    ... 7 more

使用此代码:

public static void main(String[] argv) {
    try {
        // if (System.getSecurityManager() == null) { System.setSecurityManager(new SecurityManager()); }
        // 1099 est le port sur lequel sera publié le service, il s'agit du port par défaut de RMI. Nous devons le préciser à la fois sur le registry et à la fois à la création du stub.
        LectFichierInt skeleton = (LectFichierInt) UnicastRemoteObject.exportObject(new LectFichierImpl(), 1099); // Génère un stub vers notre service qui pourra être accessible via le port précisé. L’implémentation du service étant CalcImpl
        Registry registry = LocateRegistry.createRegistry(Parametres.PORT); //Crée un registre
        registry.rebind("LectFichier", skeleton); // publie notre stub sous le nom "Calc«  dans le registre précédemment créé
        System.out.println(skeleton.getNbMots(1, 3000) + " yolooo ");
    } catch (Exception e) {
        e.printStackTrace();
    }
}

我使用端口2015,我已经制作了sudo iptables -A INPUT -p tcp -i eth0 --dport 2015 -j ACCEPT。 另一个小错误,如果我没有写System.out.println(...);程序启动和停止而不显示错误。

1 个答案:

答案 0 :(得分:0)

所以有解决方案。问题是:“未知”为什么?我不知道:D

好吧,你只需要在类中进行LectFichierInt骨架的静态声明。喜欢:

public class Yolo {
static LectFichierInt skeleton; // or stub don't cry :P

public static void main(String[] argv) {
    try {
        skeleton = (LectFichierInt) UnicastRemoteObject.exportObject(new LectFichierImpl(), 1099);
        Registry registry = LocateRegistry.createRegistry(Parametres.PORT); 
        registry.rebind("LectFichier", skeleton);
    } catch (Exception e) {
        e.printStackTrace();
    }
}
}

享受,现在如果您遇到同样的问题,请尝试修复该错误;)