我正在尝试在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();
}
}
答案 0 :(得分:1)
确保在客户端希望找到它的位置运行服务器程序(您的消息未指示端口,但执行具有其正在查找的IP地址)。如果您确定服务器在客户端启动时在该地址和端口上运行,则问题可能是系统的防火墙阻止了您的访问。如何处理 是特定于平台的。