Question

J'essaie de lier une IPv6 serveur socket en Java 1.6 sur Windows 7, l'utilisation de ce fragment:

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

Malheureusement, il échoue avec une IOException:Adresse de la famille non pris en charge par la famille de protocole:lier

Je comprends que Java est écrit avec l'hypothèse que Windows utilise séparé v4 et v6 piles (même si Windows 7 ne fait pas), et que, par conséquent, la liaison d'une seule prise pour les v4 et v6 ne peut pas travailler.Cependant, ce n'est pas ce que j'essaie de faire:J'ai simplement envie de lier un v6 à la prise tout adresse (c'est à dire::).

Modifier:Il échoue aussi sur Vista.

Ce que je fais mal?

Était-ce utile?

La solution

J'ai trouvé la solution;il est bug 6230761.La seule façon de créer une IPv6 du serveur de socket canal est de créer le serversocket première:

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

Modifier:cela signifie que NIO ne peut pas vraiment être utilisé avec le protocole IPv6.

Autres conseils

Cette erreur signifie que la combinaison d'une adresse IPv6 avec un non-protocole IPv6.Que signifie probablement que la ServerSocketChannel vous êtes en commençant par ne prend pas en charge IPv6.Je ne pense pas que Java prend officiellement en charge de Windows 7 encore.Essayez d'utiliser des cartes réseau.getNetworkInterfaces() et NetworkInterface.getInetAddresses() pour vérifier que les adresses IPv6 sont effectivement disponibles pour votre application Java.La Java docs disent même que tente de faire passer pour une adresse IPv6 lorsque IPv6 n'est pas disponible, ou lorsque IPv6 a été désactivé, permettra de lever des exceptions.

Je vais voir ce problème avec jython ainsi.

http://bugs.jython.org/issue1711

Le jython socket module doit utiliser java.nio, parce que c'est la seule façon de soutenir la non-fonctionnalité de blocage des que disponible de compatibilité exige.

Je suis extrêmement déçu de voir que le protocole IPV6 n'est pas pris en charge par la dernière version de java en cours d'exécution sur la dernière version de windows:c'est très pauvre.L'espace d'adressage IPV4 est déjà épuisé:il va y avoir beaucoup plus de demande pour la prise en charge d'IPV6 dans les mois à venir, sans parler des années.

Nous avons une solution de contournement pour jython utilisateurs, ce qui oblige les getaddrinfo() pour retourner adresses IPV4 uniquement.C'est une mauvaise solution, mais au moins, il obtient les utilisateurs et en cours d'exécution, s'ils peuvent obtenir une adresse IPV4.

http://wiki.python.org/jython/NewSocketModule#IPV6_address_support

Il y a juste un autre rapport du rapporteur de bug sur le jython tracker.Il dit qu'il a eu du succès en utilisant java.nio sockets IPV6 sur une pré-version de JDK 1.7.

http://bugs.jython.org/issue1711

Donc mon billet de blog à propos du support de l'IPV6 sur jython n'était pas prématuré :-)

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

Hmmm, il semble que ma réponse a été classé au-dessus de ma première réponse.Voir pour ma première réponse ci-dessous pour le contexte.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top