【问题标题】:Use two local ips in same port在同一个端口使用两个本地 ip
【发布时间】:2021-11-11 11:57:40
【问题描述】:

除了使用/etc/host 创建别名之外,是否可以在本地使用两个本地 ip (127.0.0.1, 127.0.0.2)?

我正在尝试测试两个指向相同 port 的服务。

我试图在 ip 127.0.0.2 中使用 NettyServerBuilderInetSocketAddress 但这是不可能的并返回 Caused by: java.net.BindException: Address already in use: bind

final SocketAddress socketAddress = new InetSocketAddress("127.0.0.2", 8888);

Server server = NettyServerBuilder.forAddress(socketAddress)
    .addService(coordinator)
    .build();
server.start();

final SocketAddress socketAddress2 = new InetSocketAddress("127.0.0.1", 8888);

Server server2 = NettyServerBuilder.forAddress(socketAddress2)
    .addService(coordinator)
    .build();
server2.start();

【问题讨论】:

标签: java java-8


【解决方案1】:

您可以在https://en.wikipedia.org/wiki/Localhost 上阅读,

IPv4 网络标准保留整个 127.0.0.0/8 地址块用于环回目的。这意味着发送到这 16​​,777,214 个地址(127.0.0.1 到 127.255.255.254)之一的任何数据包都会被环回。 IPv6 只有一个地址 ::1。

因此,除非您更改 DNS 解析编辑 /etc/hosts,否则您不能对两个环回地址使用相同的端口号。

【讨论】:

    【解决方案2】:

    每个端口都有一个,所以如果你已经运行了你的程序,它会抛出一个错误,但是如果运行两个实例然后使用不同的可用端口。

    final SocketAddress socketAddress = new InetSocketAddress("127.0.0.2", 8888);
    
    Server server = NettyServerBuilder.forAddress(socketAddress)
        .addService(coordinator)
        .build();
    server.start();
    
    final SocketAddress socketAddress2 = new InetSocketAddress("127.0.0.1", [Available_Port]);
    
    Server server2 = NettyServerBuilder.forAddress(socketAddress2)
        .addService(coordinator)
        .build();
    server2.start();
    

    【讨论】:

    • 比那更复杂
    • 现在看到这个,希望你能理解
    • “端口”是接口上协议的端口号。 1.2.3.4:80 是与 1.2.3.5:80 不同的端口。本地接口可能是一种特殊情况。
    • @Batek'S,您写的内容有效,但您没有回答问题。
    猜你喜欢
    • 1970-01-01
    • 2013-08-11
    • 2011-04-13
    • 1970-01-01
    • 2022-06-15
    • 1970-01-01
    • 2018-06-22
    • 1970-01-01
    • 2014-02-18
    相关资源
    最近更新 更多