繁体   English   中英

Eclipse 4.23.0 连接拒绝主机:localhost; 嵌套异常是:java.net.ConnectException:连接被拒绝:连接

[英]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 运行正常。 rmir​​egistry 是从 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");" 行中所示,但这并没有什么不同。 任何正确方向的指导将不胜感激。

GumballMachineTestDrive-Run 配置

服务代码:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM