java.rmi.ConnectIOException & java.net.SocketException: операция сокета на nonsocket: соединение

Я итальянский парень, извините за мой плохой английский.

Я пишу программу RMI на Java, и это раздел кода узла для подключения к серверу RMI:

try
        {//trying to connect to the Server
        Remote RemoteObject;
        BootstrapServer_Interface serverObject;
        Registry r = LocateRegistry.getRegistry(10001);
        RemoteObject = r.lookup("BOOTSTRAP-SERVER");//THIS IS LINE 52
        serverObject = (BootstrapServer_Interface)RemoteObject;
        //I get an ip as Server's answerw
        System.out.println("Il nodo "+Thread.currentThread()+" si mette in attesa");
        String ipBN = serverObject.start_join_node(fakeip);
        if(ipBN.equals("-1"))
            {System.out.println("Creazione del nodo "+Thread.currentThread()+" fallito");
            return;
            }

Однако иногда программа получает это исключение:

java.rmi.ConnectIOException: Exception creating connection to: 131.114.43.246; nested exception is: 
    java.net.SocketException: Socket operation on nonsocket: connect
    at sun.rmi.transport.tcp.TCPEndpoint.newSocket(Unknown Source)
    at sun.rmi.transport.tcp.TCPChannel.createConnection(Unknown Source)
    at sun.rmi.transport.tcp.TCPChannel.newConnection(Unknown Source)
    at sun.rmi.server.UnicastRef.newCall(Unknown Source)
    at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)
    at StorageNode.run(StorageNode.java:52)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Caused by: java.net.SocketException: Socket operation on nonsocket: connect
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.PlainSocketImpl.doConnect(Unknown Source)
    at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
    at java.net.PlainSocketImpl.connect(Unknown Source)
    at java.net.SocksSocketImpl.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at java.net.Socket.<init>(Unknown Source)
    at java.net.Socket.<init>(Unknown Source)
    at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(Unknown Source)
    at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(Unknown Source)
    ... 9 more

И этот код клиента для подключения к серверу RMI:

try
            {//scelgo casualmente un dato da cercare        
            //genero il mio indirizzo ip
            fakeip = String.valueOf((int) (Math.random() * 256)) + "."
                    + String.valueOf((int) (Math.random() * 256)) + "."
                    + String.valueOf((int) (Math.random() * 256)) + "."
                    + String.valueOf((int) (Math.random() * 256));
            //creo una Socket UDP con cui contattare il Nodo di Bootstrap
            UDPServiceSocket = scanner.UDPSocket();
            if(UDPServiceSocket==null)
                {System.out.println("Tentativo di creazione socket UDP fallito...");
                *return;}
            int UDPport = UDPServiceSocket.getLocalPort();
            fakeip=fakeip+" UDPport="+UDPport;
            //mi connetto al server tramite RMI
            Remote RemoteObject;
            Registry r = LocateRegistry.getRegistry(10001);
            RemoteObject = r.lookup("BOOTSTRAP-SERVER");//THIS IS LINE 48
            serverObject = (BootstrapServer_Interface)RemoteObject;
            //Ottengo l'ip del Bootstrap Node a cui connettermi
            System.out.println("Il client "+Thread.currentThread()+" si mette in attesa.");         
            ipBN = serverObject.client_search();
            }

И исключение в этом случае (это не обязательно происходит вместе с исключением узла, которое я опубликовал выше)

java.rmi.ConnectIOException: Exception creating connection to: 131.114.43.246; nested exception is: 
    java.net.SocketException: Socket operation on nonsocket: connect
    at sun.rmi.transport.tcp.TCPEndpoint.newSocket(Unknown Source)
    at sun.rmi.transport.tcp.TCPChannel.createConnection(Unknown Source)
    at sun.rmi.transport.tcp.TCPChannel.newConnection(Unknown Source)
    at sun.rmi.server.UnicastRef.newCall(Unknown Source)
    at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)
    at Client.run(Client.java:48)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Caused by: java.net.SocketException: Socket operation on nonsocket: connect
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.PlainSocketImpl.doConnect(Unknown Source)
    at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
    at java.net.PlainSocketImpl.connect(Unknown Source)
    at java.net.SocksSocketImpl.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at java.net.Socket.<init>(Unknown Source)
    at java.net.Socket.<init>(Unknown Source)
    at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(Unknown Source)
    at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(Unknown Source)

Я не могу найти причину, которая вызывает это исключение.

Прошу прощения за меньшее количество кода, который я выложил ранее, но это небольшая часть большого проекта, поэтому я не могу пройти весь код:D

Однако, если вам это нужно, я могу дать вам некоторую информацию об этом:

  1. Это проект DHT, и это код узла, когда он пытается связаться с сервером начальной загрузки (в действительности, с сервером RMI).

  2. Методы сервера RMI могут быть вызваны многими узлами (код выше) и / или многими клиентами одновременно.

  3. Методы сервера, вызываемые узлами и / или клиентами, создаются для управления монитором, установленным на сервере.
  4. С помощью этого монитора узлы и клиенты изменяют хэш-таблицу, следуя модели "писатели и читатели" (и т. Д. Взаимного исключения).

Большое спасибо всем, кто поможет мне с этим вопросом, и еще раз извините за мой плохой английский!

0 ответов

Другие вопросы по тегам