Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中的IPv6专用套接字_Java_Sockets_Ip Address_Ipv6 - Fatal编程技术网

java中的IPv6专用套接字

java中的IPv6专用套接字,java,sockets,ip-address,ipv6,Java,Sockets,Ip Address,Ipv6,是否可以在java中创建仅绑定到ipv6地址的套接字 我想知道我是否可以在一台机器上有两个套接字,一个绑定到ipv4地址,另一个只绑定到ipv6地址。解释ipv6如何在Java平台上工作,但没有说明仅限ipv6的套接字。甚至可能吗?我无法设置全局IPV6_V6ONLY属性 关于IPV6的问题是,它只与IPV6兼容 截至2014年: IPv4仍然承载着全球96%以上的互联网流量 我需要相同的功能—在同一端口号上拥有单独的tcp套接字(IPv4和IPv6)。我找到的唯一解决方案是为主机上的每个地址

是否可以在java中创建仅绑定到ipv6地址的套接字


我想知道我是否可以在一台机器上有两个套接字,一个绑定到ipv4地址,另一个只绑定到ipv6地址。解释ipv6如何在Java平台上工作,但没有说明仅限ipv6的套接字。甚至可能吗?我无法设置全局IPV6_V6ONLY属性

关于IPV6的问题是,它只与IPV6兼容

截至2014年:

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


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

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

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();
    }
}

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

但根据定义,没有这样的东西。我认为-IPv6是为了向后兼容而设计的,?oops,错误的逻辑。我想我是说。。。当然,IPV6只是@Elias的IPV6可能的副本。我理解这些选项。我想知道我是否可以在同一台机器上拥有两个套接字,并强制它们只绑定到ipv4和ipv6地址?我不明白为什么不能,但如果您使用的是像Java 1.5这样古老的东西,我不会对它的行为发誓。尝试将Java更新到当前支持的版本,并发布您尝试过的代码。这取决于“兼容”的含义。有很多自动转换助手。