是否可以在java中創建一個只綁定到ipv6地址的套接字?java中的僅IPv6套接字
我想知道,如果我可以有一個機器上的2個插座,這樣一個綁定到ipv4地址,另一個綁定到ipv6地址只。 Networking IPv6 User Guide for JDK/JRE 5.0解釋了ipv6如何在Java平臺上工作,但沒有提到有關僅用於ipv6套接字的任何內容。他們甚至有可能嗎?我無法設置全局IPV6_V6ONLY屬性。
是否可以在java中創建一個只綁定到ipv6地址的套接字?java中的僅IPv6套接字
我想知道,如果我可以有一個機器上的2個插座,這樣一個綁定到ipv4地址,另一個綁定到ipv6地址只。 Networking IPv6 User Guide for JDK/JRE 5.0解釋了ipv6如何在Java平臺上工作,但沒有提到有關僅用於ipv6套接字的任何內容。他們甚至有可能嗎?我無法設置全局IPV6_V6ONLY屬性。
取決於你的意思是「兼容」。有很多自動轉換助手。 – Deduplicator 2014-12-03 23:26:19
我需要是相同的 - 有單獨的tcp套接字(IPv4和IPv6)在相同的端口號上偵聽。我找到的唯一解決方案是爲主機上的每個地址創建一對套接字(IPv4和IPv6)。
爲簡單起見,以下代碼僅限於在本地主機上偵聽。它創建兩個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();
}
}
將通信限制在本地主機並不是非常有用。真正的應用程序需要enumerate network interfaces,獲取其地址,然後爲主機上的每個地址創建一個ServerSocket
。
但是根據定義,沒有這樣的事情。我認爲 - IPv6旨在向後兼容,? – Coffee 2014-12-03 19:31:22
哎呀,錯誤的邏輯。我想我的意思是......當然,IPV6是*只有* IPV6 – Coffee 2014-12-03 19:32:08
可能重複的[Java - 我怎麼能喜歡IPv6?](http://stackoverflow.com/questions/19314241/java-how-can-i -prefer-ipv6) – elias 2014-12-03 19:33:10