[英]RMI Server Connection refused to host: ############ ; nested exception is: java.net.ConnectException: Connection refused: connect
[英]Eclipse 4.23.0 Connection refused to host: localhost; nested exception is: java.net.ConnectException: Connection refused: connect
我正在研究 Freeman 和 Robson 的 Head First Design Patterns 2nd edition 中的代理模式部分。 我正在运行 Windows 10,并且当我导航到 localhost 或http://127.0.0.1/时出现 Windows IIS 屏幕时,我确定 localhost 运行正常。 rmiregistry 是从 cmd 行预先启动的,没有问题。 我在关闭防火墙的情况下运行测试,但仍然收到下面列出的错误堆栈跟踪。 我通过右键单击 .java 文件并选择“运行方式”“Java 应用程序”直接在 Eclipse 中执行 GumballMachineTestDrive 类。 下面的屏幕截图显示了 GumballMachineTestDrive 的运行配置,其中 args[0] == "localhost" 和 args 1 == 112。我已 ping 过 localhost 和 127.0.0.1,两者均未显示任何问题。 我之前尝试设置 rmi 服务器主机名,如“System.setProperty("java.rmi.server.hostname", "127.0.0.1");" 行中所示,但这并没有什么不同。 任何正确方向的指导将不胜感激。
服务代码:
package GumballMachineStatePattern;
import java.rmi.Naming;
public class GumballMachineTestDrive {
public static void main(String[] args) {
GumballMachineRemote gumballMachine = null;
// System.setProperty("java.rmi.server.hostname", "127.0.0.1");
int count;
if (args.length < 2) {
System.out.println("GumballMachine <name> <inventory>");
System.exit(1);
}
try {
count = Integer.parseInt(args[1]);
gumballMachine = new GumballMachine(args[0], count);
Naming.rebind("//" + args[0] + "/gumballmachine", gumballMachine);
} catch (Exception e) {
e.printStackTrace();
}
}
}
GumballMachine 类的代码:
package GumballMachineStatePattern;
import java.rmi.*;
import java.rmi.server.*;
public class GumballMachine extends UnicastRemoteObject implements GumballMachineRemote {
private static final long serialVersionUID = 2L;
State soldOutState;
State noQuarterState;
State hasQuarterState;
State soldState;
State winnerState;
State state = soldOutState;
int count = 0;
String location;
public GumballMachine(String location, int count) throws RemoteException {
soldOutState = new SoldOutState(this);
noQuarterState = new NoQuarterState(this);
hasQuarterState = new HasQuarterState(this);
soldState = new SoldState(this);
winnerState = new WinnerState(this);
this.location = location;
this.count = count;
if (count > 0) {
state = noQuarterState;
} else {
state = soldOutState;
}
}
public void insertQuarter() {
state.insertQuarter();
}
public void ejectQuarter() {
state.ejectQuarter();
}
public void turnCrank() {
state.turnCrank();
state.dispense();
}
void setState(State state) {
this.state = state;
}
void releaseBall() {
System.out.println("A gumball comes rolling out of the slot...");
if (count > 0) {
count = count - 1;
}
}
public int getCount() {
return count;
}
void refill(int count) {
this.count += count;
System.out.println("The gumball machine was just refilled; its new count is: " + this.count);
state.refill();
}
public State getState() {
return state;
}
public State getSoldOutState() {
return soldOutState;
}
public State getNoQuarterState() {
return noQuarterState;
}
public State getHasQuarterState() {
return hasQuarterState;
}
public State getSoldState() {
return soldState;
}
public State getWinnerState() {
return winnerState;
}
public String getLocation() {
return location;
}
public String toString() {
StringBuffer result = new StringBuffer();
result.append("\nMighty Gumball, Inc.");
result.append("\nJave-enabled Standing Gumball Model #2004\n");
result.append("Inventory: " + count + " gumball");
if (count != 1) {
result.append("s");
}
result.append("\n");
result.append("Machine is " + state + "\n");
return result.toString();
}
}
GumballMachineTestDrive 堆栈跟踪,其中 args[0] == "localhost" 和 args 1 = 112
java.rmi.ConnectException: Connection refused to host: localhost; nested exception is:
java.net.ConnectException: Connection refused: connect
at java.rmi/sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:626)
at java.rmi/sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:217)
at java.rmi/sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:204)
at java.rmi/sun.rmi.server.UnicastRef.newCall(UnicastRef.java:344)
at java.rmi/sun.rmi.registry.RegistryImpl_Stub.rebind(RegistryImpl_Stub.java:150)
at java.rmi/java.rmi.Naming.rebind(Naming.java:177)
at GumballMachineStatePattern.GumballMachineTestDrive.main(GumballMachineTestDrive.java:24)
Caused by: java.net.ConnectException: Connection refused: connect
at java.base/sun.nio.ch.Net.connect0(Native Method)
at java.base/sun.nio.ch.Net.connect(Net.java:579)
at java.base/sun.nio.ch.Net.connect(Net.java:568)
at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:588)
at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327)
at java.base/java.net.Socket.connect(Socket.java:633)
at java.base/java.net.Socket.connect(Socket.java:583)
at java.base/java.net.Socket.<init>(Socket.java:507)
at java.base/java.net.Socket.<init>(Socket.java:287)
at java.rmi/sun.rmi.transport.tcp.TCPDirectSocketFactory.createSocket(TCPDirectSocketFactory.java:40)
at java.rmi/sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:620)
... 6 more
我解决了这个问题。 我需要将该项目重新作为一个新的 java 项目来清理可能存在的一些依赖冲突。 它也是一个很好的学习课程 rmi 和 xampp 本地服务器配置。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.