Error = java.rmi.ConnectException:Connection拒绝主机:192.168.1.100;嵌套异常是:java.net.ConnectException:

时间:2014-02-18 14:41:40

标签: java rmi

我正在尝试在java中使用RMI实现一个简单的计算器。我在NetBeans中运行代码并使用命令提示符。两次我都遇到了一些错误。当我在NetBeans中运行它时,我收到此错误 - “Error = java.rmi.ConnectException:Connection拒绝主机:192.168.1.100;嵌套异常是:java.net.ConnectException:Connection refused:connect”。为什么会出现此错误?我将在下面提供我的代码:

package rmi;
import java.rmi.*;

public interface CalcIntf extends Remote
{

double add(double d1,double d2)throws RemoteException;

double subtract(double d1,double d2)throws RemoteException;

double product(double d1,double d2)throws RemoteException;

double division(double d1,double d2)throws RemoteException;
}

package rmi;
import java.rmi.*;
import java.rmi.server.*;

public class CalcImpl extends UnicastRemoteObject implements CalcIntf
{

public CalcImpl()throws RemoteException
{
}

@Override
public double add(double d1,double d2)throws RemoteException
{
return(d1+d2);
}

@Override
public double subtract(double d1,double d2)throws RemoteException
{
return(d1-d2);
}

@Override
public double product(double d1,double d2)throws RemoteException
{
return(d1*d2);
}  

@Override
public double division(double d1,double d2)throws RemoteException
{
return(d1/d2);
}

}

package rmi;
import java.net.MalformedURLException;
import java.rmi.*;

public class ServerRMI
{

public static void main(String[] ar)
{
try
{
  CalcImpl cal=new CalcImpl();
  Naming.rebind("ServerRMI",cal);
}
catch(RemoteException | MalformedURLException e)
{
  System.out.println("Error = "+e);
}
}
}

package rmi;
import java.rmi.*;
import java.awt.*;
import java.awt.event.*;
import java.net.MalformedURLException;
import javax.swing.*;

public class ClientRMI extends JFrame implements ActionListener
{
TextField t1,t2;
Label l1,l2,l3;
Button b1,b2,b3,b4;

@SuppressWarnings("LeakingThisInConstructor")
public ClientRMI()
{
setLayout(null);
setSize(500,500);
setLocation(50,50);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setTitle("Calculator");
setVisible(true);

l1=new Label("Enter First Number :");
l1.setBounds(10,20,150,30);
add(l1);

t1=new TextField();
t1.setBounds(170,20,100,30);
add(t1);

l2=new Label("Enter Second Number :");
l2.setBounds(10,60,150,30);
add(l2);

t2=new TextField();
t2.setBounds(170,60,100,30);
add(t2);

b1=new Button("+");
b1.setBounds(20,100,30,30);
add(b1);
b1.addActionListener(this);

b2=new Button("-");
b2.setBounds(60,100,30,30);
add(b2);
b2.addActionListener(this);

b3=new Button("*");
b3.setBounds(100,100,30,30);
add(b3);
b3.addActionListener(this);

b4=new Button("/");
b4.setBounds(140,100,30,30);
add(b4);
b4.addActionListener(this);

l3=new Label();
l3.setBounds(100,150,150,30);
add(l3);
}

@Override
public void actionPerformed(ActionEvent ae)
{

double d1,d2;


if(ae.getSource()==b1)
{
try
{
  String url="rmi://127.0.0.1/ServerRMI";
CalcIntf calintf=(CalcIntf)Naming.lookup(url);
  d1=Double.valueOf(t1.getText()).doubleValue();
  d2=Double.valueOf(t2.getText()).doubleValue();
  l3.setText("Result = "+calintf.add(d1,d2));
  }
  catch(NotBoundException | MalformedURLException | RemoteException | 
              NumberFormatException e)
{
System.out.println("Error = " +e);
}
}

if(ae.getSource()==b2)
{
try
{

  String url="rmi://127.0.0.1/ServerRMI";
CalcIntf calintf=(CalcIntf)Naming.lookup(url);
  d1=Double.valueOf(t1.getText()).doubleValue();
  d2=Double.valueOf(t2.getText()).doubleValue();
  l3.setText("Result = "+calintf.subtract(d1,d2));
  }
  catch(NotBoundException | MalformedURLException | RemoteException | 
              NumberFormatException e)
{
System.out.println("Error = " +e);
}
}

if(ae.getSource()==b3)
{
try
{

String url="rmi://127.0.0.1/ServerRMI";
CalcIntf calintf=(CalcIntf)Naming.lookup(url);

  d1=Double.valueOf(t1.getText()).doubleValue();
  d2=Double.valueOf(t2.getText()).doubleValue();
  l3.setText("Result = "+calintf.product(d1,d2));
  }
  catch(NotBoundException | MalformedURLException | RemoteException | 
              NumberFormatException e)
{
System.out.println("Error = " +e);
}
}

if(ae.getSource()==b4)
{
try
{

 String url="rmi://127.0.0.1/ServerRMI";
CalcIntf calintf=(CalcIntf)Naming.lookup(url);
  d1=Double.valueOf(t1.getText()).doubleValue();
  d2=Double.valueOf(t2.getText()).doubleValue();
  l3.setText("Result = "+calintf.division(d1,d2));
  }
  catch(NotBoundException | MalformedURLException | RemoteException | 
              NumberFormatException e)
{
System.out.println("Error = " +e);
}
}
}

public static void main(String args[])
{
    ClientRMI cl=new ClientRMI();
}
}

1 个答案:

答案 0 :(得分:1)

确保在客户端希望找到它的位置运行服务器程序(您的消息未指示端口,但执行具有其正在查找的IP地址)。如果您确定服务器在客户端启动时在该地址和端口上运行,则问题可能是系统的防火墙阻止了您的访问。如何处理 是特定于平台的。

相关问题