【问题标题】:java.rmi.ConnectException: Connection refused to host: local host; in Eclipsejava.rmi.ConnectException:连接拒绝主机:本地主机;在日食中
【发布时间】:2015-06-23 10:39:30
【问题描述】:

好的,我目前在 Eclipse 中工作,运行程序时出现以下错误:

错误:

java.rmi.ConnectException:连接拒绝主机:localhost;嵌套异常是:java.net.ConnectException:连接被拒绝:连接 有人知道我为什么要得到这些以及如何解决它们吗?

客户代码:

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;
}
}

服务器代码:

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 ...");
}
}

消息服务器代码:

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;
}

消息服务器代码:

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;
}
}

【问题讨论】:

  • @Zyn 当我让它在后台运行时,它会抛出这个错误:错误:java.rmi.NotBoundException:消息
  • @Zyn 好的,我做到了,当我启动 Server_Setup 类时出现此错误:端口已在使用中:1099;嵌套异常是:java.net.BindException:地址已在使用:JVM_Bind
  • @zyn 可以是任何数字,例如 1、2、3、.4 等,还是可以使用特定的列表或端口号?
  • @zyn 我运行了服务器类,它运行良好,但是客户端运行时弹出此错误:错误:java.rmi.NotBoundException:消息!对不起,我对这些东西不熟悉哈哈
  • @zyn 我运行了服务器类并且它工作了,但是客户端运行时弹出这个错误:错误:java.rmi.NotBoundException:消息

标签: java eclipse exception connection rmi


【解决方案1】:

我与另一个program 遇到了同样的问题,并通过一些步骤解决了它:

  1. 编译类


  1. 使用以下命令运行 RMI 注册表: start rmiregistry。 (如果我不这样做,我会收到此错误。)

让我们看看没有这个命令:


运行服务器:


现在,我将使用这个命令start rmiregistry


重新运行服务器并没有再次遇到问题:

【讨论】:

    猜你喜欢
    • 2013-07-06
    • 2017-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-10
    • 2021-12-15
    • 1970-01-01
    相关资源
    最近更新 更多