문제

이 조각을 사용하여 Windows 7의 Java 1.6에서 IPv6 서버 소켓을 바인딩하려고합니다.

ssock = ServerSocketChannel.open();
ServerSocket sock = ssock.socket(); 
sock.bind(new InetSocketAddress(InetAddress.getByAddress(new byte[16]), 0));

불행히도, 이것은 IoException에서 실패합니다 : 프로토콜 패밀리가 지원하지 않는 주소 패밀리 : BIND

Java는 Windows가 별도의 V4 및 V6 스택을 사용한다고 가정하여 작성되었으며 (Windows 7은 그렇지 않더라도) V4와 V6 모두에 대한 단일 소켓을 바인딩 할 수 없다는 것을 이해합니다. 그러나 이것은 내가 시도하는 것이 아닙니다. 나는 단지 V6 소켓을 어느 주소 (예 : :).

편집하다: Vista에서도 실패합니다.

내가 뭘 잘못하고 있죠?

도움이 되었습니까?

해결책

나는 해결책을 찾았다. 그것은이다 버그 6230761. IPv6 서버 소켓 채널을 작성하는 유일한 지원 방법은 먼저 Serversocket을 작성하는 것입니다.

ServerSocket s = new ServerSocket();
s.bind(new InetSocketAddress(InetAddress.getByName("::"), 0));

편집하다: 이것은 NIO가 실제로 IPv6과 함께 사용할 수 없음을 의미합니다.

다른 팁

이 오류는 IPv6 주소를 비 IPV6 프로토콜과 혼합하고 있음을 의미합니다. 이는 시작중인 서버 Socketchannel이 IPv6을 지원하지 않음을 의미합니다. 나는 Java가 공식적으로 Windows 7을 지원한다고 생각하지 않습니다. NetworkInterface.getNetWorkInterfaces () 및 NetworkInterface.getInetAddresses ()를 사용하여 IPv6 주소가 실제로 Java 앱에서 사용할 수 있는지 확인하십시오. Java Docs는 IPv6을 사용할 수 없거나 IPv6이 비활성화 된 경우 IPv6 주소를 통과하려고 시도하면 예외가 제기 될 것이라고 말합니다.

나는 Jython 에도이 문제를보고 있습니다.

http://bugs.jython.org/issue1711

Jython Socket 모듈은 java.nio를 사용해야합니다. 왜냐하면 Cpython 호환성이 요구하는 비 차단 기능을 지원하는 유일한 방법이기 때문입니다.

나는 최신 창에서 실행되는 최신 Java에 의해 IPv6이 지원되지 않는다는 것을보고 매우 실망했습니다. 이것은 매우 가난합니다. IPv4 주소 공간은 이미 소진되었습니다. 앞으로 몇 달 동안 IPv6 지원에 대한 수요가 훨씬 더 많아 질 것입니다.

Jython 사용자를위한 해결 방법이 있으며, 이는 GetAddrInfo () 함수가 IPv4 주소 만 반환하도록 강요합니다. 해결 방법이 좋지 않지만 IPv4 주소를 얻을 수 있다면 사용자를 높이고 실행할 수 있습니다.

http://wiki.python.org/jython/newsocketmodule#ipv6_address_support

Jython Tracker의 버그 기자의 또 다른 보고서가있었습니다. 그는 JDK 1.7의 조기 출시에서 IPv6과 함께 Java.nio 소켓을 사용하여 성공했다고 말했다.

http://bugs.jython.org/issue1711

그래서 Jython의 IPv6 지원에 대한 내 블로그 게시물은 조기에 없었습니다 :-)

http://jython.xhaus.com/jython-supports-ipv6/

흠, 두 번째 답변이 첫 번째 답변 위에 나열된 것으로 보입니다. 컨텍스트는 아래의 첫 번째 답변을 참조하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top