我是ipv6功能的新手。
我试图通过ipv6地址从节点1连接到节点2,但我得到“java.net.SocketException:Permission denied”。
我在论坛中搜索过,他们建议使用“-Djava.net.preferIPv4Stack = true”。但由于我必须测试ipv6地址,我将其设置为“-Djava.net.preferIPv4Stack = false”。
我的示例程序如下所示,我从Node1运行。
public static void main(String...args) {
final Socket s = new Socket();
int port = 5122;
try {
s.setSoTimeout(30000);
s.connect(new InetSocketAddress("fcff:3:10:64:5e26:aff:fe77:e4fd", port), 5000);
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
来自Node2的ifconfig输出。
[root@MAV ipv6_real]# ifconfig
em1 Link encap:Ethernet HWaddr 5C:26:0A:77:E4:FD
inet addr:10.10.64.86 Bcast:10.10.67.255 Mask:255.255.252.0
inet6 addr: fe80::5e26:aff:fe77:e4fd/64 Scope:Link
inet6 addr: fcff:3:10:64:5e26:aff:fe77:e4fd/64 Scope:Global
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:843294 errors:0 dropped:0 overruns:0 frame:0
TX packets:390846 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:351525171 (335.2 MiB) TX bytes:74057040 (70.6 MiB)
Interrupt:20 Memory:e2e00000-e2e2000
异常堆栈跟踪:
java.net.SocketException: Permission denied
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
at java.net.Socket.connect(Socket.java:529)
at com.vij.test.sockettest.main(sockettest.java:18)
操作系统:Fedora 16
测试的Java版本:jdk1.6.0_33,jdk1.6.0_32,jdk1.6.0_25
我也试过-Djava.net.preferIPv6Addresses = true,但输出相同。
如果你能帮助我解决这个问题,那就太好了。