Pourquoi ai-je besoin de java.net.preferIPv4Stack=true uniquement sur certains systèmes Windows 7?


J'utilise Java sur les machines Windows 7 (64 bits) depuis un certain temps et je n'ai jamais eu de problèmes avec l'impossibilité de créer une connexion réseau. Maintenant, sur les systèmes de l'entreprise pour laquelle je travaille, je dois définir "- Djava.net.preferIPv4Stack=true" ou il semble que les processus java ne soient pas en mesure de créer une seule connexion.

L'inconvénient est que si je ne définis pas "_JAVA_OPTIONS", je devrais configurer des tonnes de services pour utiliser ce paramètre. Cependant si je l'utilise Java affiche ceci idiot " Ramassé: _JAVA_OPTIONS..."à stderr (Je me demande quel gars a pris cette décision stupide). Cela fait cependant échouer mes compilations GWT dans IntelliJ.

Ce que je voudrais savoir ... c'est la première fois que j'ai ces problèmes et je suppose qu'ils doivent en quelque sorte être liés à la configuration du système d'exploitation. Qu'est-ce qui cause probablement ces problèmes (Comme je l'ai mentionné ... J'ai environ 4 autres systèmes avec des machines virtuelles java Windows 7 et 64 bits qui n'ont pas ces problèmes).

Chris

Author: Christofer Dutz, 2013-07-15

3 answers

Ok, donc nous avons trouvé la raison.

Ce problème semblait s'être produit sur des systèmes contenant une version spéciale du logiciel d'accès à distance que notre société utilisait. Cela semble avoir inséré des dll modifiées dans la pile réseau Windows (On nous a dit afin de détecter automatiquement la connectivité réseau). Il semble que cette dll ait eu quelques problèmes, provoquant le blocage de tout le trafic IPv6. Il a également causé les machines affectées d'avoir des écrans bleus réguliers. Désinstaller ce logiciel a obtenu le système Bluescreen gratuit et je n'ai plus besoin du paramètre preferIPv4Stack.

 5
Author: Christofer Dutz, 2013-09-28 18:16:53

Ce n'est qu'une théorie ...

Selon la documentation Java, si IPv6 est disponible sur le système d'exploitation, le socket natif sous-jacent sera un socket IPv6.

Si le système d'exploitation n'a pas IPv6, ou s'il a correctement configuré IPv6, c'est ce que vous voulez. Mais si le système d'exploitation a IPv6 qui ne fonctionne pas correctement, alors j'imagine que Java tentera d'utiliser IPv6 pour établir des connexions et échouer.


Cependant si je l'utilise Java sorties ce stupide " Ramassé: _JAVA_OPTIONS..."à stderr.

Selon ce Q&A, il n'y a aucun moyen de le désactiver: En supprimant le message" Ramassé _JAVA_OPTIONS "

Je suggère de définir _JAVA_OPTIONS globalement (si vous le devez), puis de le désactiver pour l'environnement à partir duquel vous lancez votreE.

 2
Author: Stephen C, 2017-05-23 11:59:52

Juste ma contribution:

La Désactivation de tous les ipv6 sur les périphériques réseau résolu pour moi.

J'espère que cela aide

 0
Author: Eldad AK, 2013-10-30 12:24:11