0

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;
}
}
Stephen King
  • 11
  • 1
  • 8
  • @Zyn when i have it run in background it throws up this error: Error : java.rmi.NotBoundException: Messages – Stephen King Apr 16 '15 at 19:52
  • @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 Apr 16 '15 at 21:25
  • @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 Apr 16 '15 at 21:34
  • @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 Apr 16 '15 at 21:40
  • @zyn I ran the server class and it worked, however client when ran popped up this error: Error : java.rmi.NotBoundException: Messages – Stephen King Apr 16 '15 at 21:52
  • @Zyn no your great help dont apologise haha ! when do i kill it and how haha ? do i keep running it in background, start the Server_Setup class and then do something ? sorry im hopeless, been at this for too long today but need it done haha – Stephen King Apr 16 '15 at 21:58
  • @Zyn YOU ARE GOD ! ill let you know if i run into more difficultly in next minutes ! – Stephen King Apr 16 '15 at 22:01
  • ok thanks :) ! seperate question : `System.out.println("Server ready."); while (true) { System.out.println("Waiting for a connection."); MyStreamSocket Socket = new MyStreamSocket(connectionSocket.accept()); System.out.println("Connection Accepted"); ` It prints server ready and waiting for connection but never prints connection accepted ? any ideas – Stephen King Apr 16 '15 at 22:12
  • Asking a new question about new code that has nothing to do with RMI in a comment to an RMI question isn't the way to get it answered. – user207421 Apr 16 '15 at 22:26
  • yea i didnt think it would be answered, was just a lucky shot when i had this question going, it was all part of the same project so was hoping it wasnt too difficult...ill open another question now @EJP – Stephen King Apr 16 '15 at 22:42

1 Answers1

0

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

invzbl3
  • 5,872
  • 9
  • 36
  • 76