سؤال

أحاول ربط مقبس خادم IPv6 في Java 1.6 على Windows 7 ، باستخدام هذه الشظية:

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

لسوء الحظ ، يفشل هذا مع IOException: معالجة الأسرة غير مدعومة من عائلة البروتوكول: ربط

أتفهم أن Java مكتوب بافتراض أن Windows يستخدم مكدسات V4 و V6 منفصلة (على الرغم من أن Windows 7 لا) ، وبالتالي فإن ربط مقبس واحد لكل من V4 و V6 لا يمكن أن يعمل. ومع ذلك ، هذا ليس ما أحاول القيام به: أريد فقط ربط مقبس V6 بمقبس V6 أي العنوان (أي: :).

تعديل: يفشل أيضا على فيستا.

ما الخطأ الذي افعله؟

هل كانت مفيدة؟

المحلول

لقد وجدت الحل. أنه علة 6230761. الطريقة الوحيدة المدعومة لإنشاء قناة مقبس خادم IPv6 هي إنشاء Serversocket أولاً:

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

تعديل: هذا يعني أنه لا يمكن استخدام NIO حقًا مع IPv6.

نصائح أخرى

هذا الخطأ يعني أنك تقوم بخلط عنوان IPv6 مع بروتوكول غير IPV6. هذا يعني على الأرجح أن الخوادم التي تبدأ بها لا تدعم IPv6. لا أعتقد أن Java يدعم Windows 7 رسميًا حتى الآن. حاول استخدام NetworkInterface.getNetworkInterFaces () و NetworkInterface.getInetAddresses () للتأكد من أن عناوين IPv6 متاحة فعليًا لتطبيق Java الخاص بك. حتى أن مستندات Java تقول أن محاولة تمرير عنوان IPv6 عندما لا يكون IPv6 متاحًا ، أو عندما يتم تعطيل IPv6 ، فإن استثناءات.

أرى هذه المشكلة مع Jython أيضًا.

http://bugs.jython.org/issue1711

يجب أن تستخدم وحدة Socket Jython Java.nio ، لأن هذه هي الطريقة الوحيدة لدعم وظائف عدم الحظر التي يتطلبها توافق Cpython.

أشعر بخيبة أمل شديدة ليرى أن IPv6 غير مدعوم بأحدث جافا الذي يعمل على أحدث النوافذ: هذا ضعيف للغاية. تم استنفاد مساحة عنوان IPv4 بالفعل: سيكون هناك المزيد من الطلب على دعم IPv6 في الأشهر المقبلة ، ناهيك عن سنوات.

لدينا حل لمستخدمي Jython ، الذي يفرض وظيفة getaddrinfo () على إرجاع عناوين IPv4 فقط. إنه حل بديل سيئ ، لكنه على الأقل يحصل على المستخدمين وتشغيلهم ، إذا كان بإمكانهم الحصول على عنوان IPv4.

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

كان هناك مجرد تقرير آخر من مراسل هذا الخطأ على متتبع Jython. يقول إنه حقق نجاحًا باستخدام Sockets Java.nio مع IPv6 في إصدار مبكر من JDK 1.7.

http://bugs.jython.org/issue1711

لذا ، لم يكن نشر مدونتي حول دعم IPv6 على Jython سابقًا لأوانه :-)

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

هممم ، يبدو أن إجابتي الثانية قد تم سردها فوق إجابتي الأولى. انظر للحصول على إجابتي الأولى أدناه للسياق.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top