【问题标题】:IPv6 only socket in javajava中的仅IPv6套接字
【发布时间】:2015-02-01 12:08:04
【问题描述】:

是否可以在 java 中创建一个只绑定到 ipv6 地址的套接字?

我想知道我是否可以在一台机器上拥有 2 个套接字,以便一个绑定到 ipv4 地址,另一个只绑定到 ipv6 地址。 Networking IPv6 User Guide for JDK/JRE 5.0 解释了 ipv6 如何在 Java 平台上工作,但没有说明 ipv6 only sockets。他们甚至可能吗?我无法设置全局 IPV6_V6ONLY 属性。

【问题讨论】:

  • 但根据定义,没有这样的事情。我认为 - IPv6 旨在向后兼容,?
  • 糟糕,逻辑错误。我想我的意思是……当然,IPV6 只有 IPV6
  • @Elias 我理解这些选项。我想知道我是否可以在同一台机器上拥有 2 个套接字并强制它们仅绑定到 ipv4 和 ipv6 地址?
  • 我不明白为什么不这样做,但是如果您使用的东西与 Java 1.5 一样古老,我不会对它的行为发誓。尝试将 Java 更新到当前支持的版本并发布您尝试过的代码。

标签: java sockets ip-address ipv6


【解决方案1】:

我需要相同的 - 拥有在相同端口号上侦听的单独 tcp 套接字(IPv4 和 IPv6)。我找到的唯一解决方案是为主机上的每个地址创建一对套接字(IPv4 和 IPv6)。

为简单起见,以下代码仅限于在 localhost 上侦听。它创建了两个ServerSocket 实例。其中一个绑定到 IPv4 localhost,其中一个绑定到 IPv6 localhost。

import java.io.*;
import java.net.*;

public class DualSock implements Runnable {

    ServerSocket s;
    String ver;
    static final int port = 1234;

    public void run() {
        while (true) {
            try {
               Socket client = s.accept();
               System.out.println("Connection over " + ver + " from " + client.getRemoteSocketAddress());
               client.close();
            } catch (Exception e) {
               System.out.println(e);
               System.exit(1);
            }
        }
    }

    public DualSock(ServerSocket s, String ver) {
       this.s = s;
       this.ver = ver;
    }

    public static void main(String argv[]) throws Exception {
        InetAddress address4 = InetAddress.getByName("127.0.0.1");
        ServerSocket server4 = new ServerSocket(port, 5, address4);
        DualSock ip4app = new DualSock(server4, "IPv4");

        InetAddress address6 = InetAddress.getByName("::1");
        ServerSocket server6 = new ServerSocket(port, 5, address6);
        DualSock ip6app = new DualSock(server6, "IPv6");

        new Thread(ip4app).start();
        new Thread(ip6app).start();
    }
}

限制与本地主机的通信不是很有用。一个真正的应用程序需要enumerate network interfaces,获取它们的地址,然后在主机上为每个地址创建一个ServerSocket

【讨论】:

    【解决方案2】:

    关于 IPV6 的事情,是它只与 IPV6 兼容。

    Which is the drawback of IPv6

    截至 2014 年:

    IPv4,仍然承载着全球 96% 以上的互联网流量

    source

    【讨论】:

    • 取决于您对“兼容”的含义。有很多自动转换助手。
    猜你喜欢
    • 2020-12-26
    • 2012-11-05
    • 1970-01-01
    • 2021-12-01
    • 1970-01-01
    • 2017-03-20
    • 2012-07-27
    • 2011-08-19
    • 1970-01-01
    相关资源
    最近更新 更多