0
votes

Ok I'm currently working in Eclipse and when I run my program I get these errors:

Error :

java.rmi.ConnectException: Connection refused to host: localhost; nested exception is: java.net.ConnectException: Connection refused: connect Anyone any idea why im getting these and how to solve them ?

Client Code:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.util.List;


public class Client 
{
public static void main(String[] args) 
{


    Message_Server_Interface server = createServer();

    String key = null;
    String message = null;
    String input = null;
    int num = -1;

    do {
        PrintMenu();
        key = ReadKey();

        switch (key)
        {
        case "1":
            System.out.println("Enter your message");
            message = ReadKey();
            try 
            {
                server.addMessage(message);
            } catch (RemoteException e) 
            {
                e.printStackTrace();
            }
            break;
        case "2":
            try 
            {
                System.out.println(server.getMessage());
            } catch (RemoteException e) 
            {
                e.printStackTrace();
            }
            break;
        case "3":
            try 
            {
                System.out.println(server.getMessageCount());
            } catch (RemoteException e) 
            {
                e.printStackTrace();
            }
            break;
        case "4":
            try 
            {
                List<String> messages = server.getAllMessages();
                for(String str : messages)
                {
                    System.out.println(str);
                }
            } catch (RemoteException e) 
            {
                e.printStackTrace();
            }
            break;
        case "5":
            System.out.println("How many messages do you want to print?");
            input = ReadKey();

            try 
            {
                num = -1;
                num = Integer.parseInt(input);
            } catch(NumberFormatException nfe) 
            {
                System.err.println("Invalid Format!");
            }

            try {
                List<String> messages = server.getNMessages(num);
                for(String str : messages)
                {
                    System.out.println(str);
                }
            } catch (RemoteException e) 
            {
                e.printStackTrace();
            }
            break;
        case "6":
            System.out.println("How many recent messages do you want to       save?");
            input = ReadKey();

            try 
            {
                num = -1;
                num = Integer.parseInt(input);
            } catch(NumberFormatException nfe)
            {
                System.err.println("Invalid Format!");
            }

            try 
            {
                server.messagesToStore(num);
            } catch (RemoteException e) 
            {
                e.printStackTrace();
            }
            break;
        }

    } while (true);
}

private static Message_Server_Interface createServer() 
{
    String hostname = "localhost";
    Message_Server_Interface messageServer = null;

    try 
    {
        // locate the registry
        Registry registry = LocateRegistry.getRegistry(hostname);

        // then locate the message object stub
        messageServer = (Message_Server_Interface)     registry.lookup("Messages");

    } catch (Exception e) 
    {
        System.out.println("Error : " + e);
    }

    return messageServer;
}

private static void PrintMenu()
{
    System.out.println("Please select an option:");
    System.out.println("----------------------");
    System.out.println("1: Add a message");
    System.out.println("2: Print most recent message");
    System.out.println("3: Print number of messages");
    System.out.println("4: Print all messages");
    System.out.println("5: Return N messages");
    System.out.println("6: Retain only N messages");
}

private static String ReadKey()
{
    BufferedReader br = new BufferedReader(new      InputStreamReader(System.in));
    String key = null;
    try 
    {
        key = br.readLine();
    } catch (IOException e) 
    {
        e.printStackTrace();
    }

    return key;
}
}

Server Code:

import java.rmi.server.UnicastRemoteObject;
import java.rmi.registry.Registry;
import java.rmi.registry.LocateRegistry;

public class Server_Setup 
{
public static void main(String args[])
{
    try 
    {
        Message_Server messageServer = new Message_Server();

        Message_Server_Interface messageStub = (Message_Server_Interface)     UnicastRemoteObject.exportObject(messageServer, 1200);

        Registry registry = LocateRegistry.createRegistry(1099);
        registry.rebind("Messages", messageStub);

    } catch (Exception e) 
    {
        System.out.println(e.getMessage());
    }

    System.out.println("Server started ...");
}
}

Message Server Code:

import java.rmi.Remote;
import java.rmi.RemoteException;
import java.util.List;


interface Message_Server_Interface extends Remote
{
public void addMessage(String message) throws RemoteException;
public String getMessage() throws RemoteException;
public int getMessageCount() throws RemoteException;
public List<String> getAllMessages() throws RemoteException;
public List<String> getNMessages(int number) throws RemoteException;
public void messagesToStore(int number) throws RemoteException;
}

Message Server Code:

import java.rmi.RemoteException;
import java.util.ArrayList;
import java.util.List;


public class Message_Server implements Message_Server_Interface
{
private ArrayList<String> messageArray;

// Default constructor
public Message_Server() 
{
    super();
    // initialise ArrayList to default size (10, according to javadocs)
    messageArray = new ArrayList<String>();
}

public void addMessage(String message) throws RemoteException 
{
    messageArray.add(message);
}

public String getMessage() throws RemoteException 
{

    return messageArray.get(messageArray.size() - 1);
}

public int getMessageCount() throws RemoteException 
{
    return messageArray.size();
}

public List<String> getAllMessages() throws RemoteException 
{
    return messageArray;
}

public List<String> getNMessages(int number) throws RemoteException 
{
    if (number > messageArray.size()) throw new IllegalArgumentException();

    List<String> recentMessages = new ArrayList<String>();

    for (int i = 1; i <= number; i++)
    {
        recentMessages.add(messageArray.get(messageArray.size() - i));
    }

    return recentMessages;
}

public void messagesToStore(int number) throws RemoteException 
{
    if (number > messageArray.size()) throw new IllegalArgumentException();

    List<String> retainedMessages = new ArrayList<String>();

    for (int i = 1; i <= number; i++)
    {
        retainedMessages.add(messageArray.get(messageArray.size() - i));
    }

    messageArray.clear();
    messageArray = (ArrayList<String>) retainedMessages;
}
}
1
@Zyn when i have it run in background it throws up this error: Error : java.rmi.NotBoundException: Messages - Stephen King
@Zyn ok i done that and i got this error when i started the Server_Setup class: Port already in use: 1099; nested exception is: java.net.BindException: Address already in use: JVM_Bind - Stephen King
@zyn can it be any number at all like 1, 2, 3, ,4 etc or are there a certain list or port numbers you can use? - Stephen King
@zyn I ran the server class and it worked perfect, however client when ran popped up this error: Error : java.rmi.NotBoundException: Messages !! sorry im new to this stuff haha - Stephen King
@zyn I ran the server class and it worked, however client when ran popped up this error: Error : java.rmi.NotBoundException: Messages - Stephen King

1 Answers

0
votes

I had the same issue with another program and solved it using some steps:

  1. Compiled classes

enter image description here


  1. Run RMI Registry using the command: start rmiregistry. (If I didn't do that, then I would get this error.)

Let's see without this command:

enter image description here


Run the server:

enter image description here


Now, I will use this command start rmiregistry:

enter image description here


Rerun server and didn't get the issue again:

enter image description here