Comment soutenir à la fois IPv4 &IPv6 sur Java
L'un de nos programme Java lorsqu'il est lancé, il n'écouter que sur l'IPv6 (8080)
par exemple
# netstat -ntpl
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN -
tcp6 0 0 :::8080 :::* LISTEN -
tcp6 0 0 :::22 :::* LISTEN -
Le problème est qu'il n'est pas accessible de l'extérieur (à l'exception de localhost), pour résoudre ce problème, j'ai ce ajouter manuellement
-Djava.net.preferIPv4Stack=true
Mais cette faire le programme est uniquement pour le réseau IPv4.
Est-il possible de faire quelque chose comme sshd comme ci-dessus, les deux prennent en charge IPv4 et IPv6?
OriginalL'auteur Howard | 2012-04-30
Vous devez vous connecter pour publier un commentaire.
Je soupçonne que c'est moins d'une programmation Java problème qu'un OS pile de mise en réseau/système d'exploitation réseau configuration question:
Windows 7 et Windows Server 2008 poignée double meules de l'amende juste; Windows XP, pas tellement 🙂
Vous semblez être sur Linux la plus moderne de postes de travail Linux et les serveurs aussi poignée double ipv4 ipv6 sans problème.
Voici un bon article sur l'interopérabilité:
Vous savez comment vous pouvez "désactiver" IPV6 pour votre application Java:
-Djava.net.preferIPv4Stack=true
Vous pouvez également forcer le serveur pour utiliser IPV6 comme ceci:
echo 0 > /proc/sys/net/ipv6/bindv6only
C'est sans doute votre meilleure source:
Vous devez absolument être en mesure d'accomplir ce que vous voulez (au moins à la programmation Java niveau), sauf si vous êtes limité par le réseau externe de questions:
PS:
Voici un bon lien qui explique ce qui se passe au niveau de la socket. Ce n'est pas Java (C), mais exactement l'exemple de principes s'appliquent:
OriginalL'auteur paulsm4