كيفية إعادة طلب واجهات الشبكة التي تم إرجاعها بواسطة WSAICTL مع رمز التحكم Sio_get_interface_list

StackOverflow https://stackoverflow.com/questions/1916452

  •  20-09-2019
  •  | 
  •  

سؤال

هل هناك طريقة لإملاء ترتيب واجهات الشبكة التي تم إرجاعها بواسطة Win32 Winsock WSAIoctl المهام SIO_GET_INTERFACE_LIST وظائف؟

خلفية:

لدينا نظام Corba غير متجانس حيث يقوم ACMALSCICE الذي يقوم بتنفيذ ACE / TAO CORBA على Windows على نظام التشغيل Windows / يحتوي على خدمات ACE / TAO المسجلة معها أن العملاء الذين يتم تنفيذهم باستخدام تطبيق IIOP.NET Corba. يعمل العملاء المقيمون IIOP.NET على جهاز Windows منفصل. يحتوي الجهاز ACE / TAO على واجهات شبكة متعددة (واحد فقط يمكن الوصول إليه بواسطة جهاز العميل) وبالتالي عناوين IP متعددة.

يمكن للعميل IIOP.NET الاتصال بأكمله واسترداد وكيل إلى كائن Corba Server المسجل الذي يحتاجه إلى استخدامه، ولكن عندما يحاول استخدام الوكيل الذي يلقي الاستثناءات.

بناء على الكثير من الوقت الذي تم إنفاقه تصحيح الأخطاء، فقد وصلنا إلى استنتاج مفاده أن المشكلة هي أن iiop.net يحاول فقط الاتصال بعنوان IP الأول في سلسلة IOR Corba Ior التي ترجع خدمة الاسم عند سؤال الخدمة. سلسلة IOR هي وصف للكائن، بما في ذلك عنوان IP الخاص به (IP). سيحاول معظم عملاء Corba التواصل مع كائن الخادم باستخدام جميع العناوين في سلسلة IOR، ولكن يبدو أنه iiop.net لا يفعل ذلك.

يستخدم رمز ACE / TAO الذي يولد سلسلة IOR Winsock WSAIoctl أمر مع رمز التحكم SIO_GET_INTERFACE_LIST لإرجاع قائمة واجهات الشبكة في المربع، ثم يضيفها جميعا إلى سلسلة IOR. المشكلة هي أن عنوان IP الأول هو ليس على الشبكة التي يستخدمها العميل IIOP، لذلك عندما يحاول عميل IIOP.NET الاتصال كائن الخادم باستخدام عنوان IP هذا فمن الواضح أنه يفشل ولا يحاول أبدا استخدام عنوان IP الصحيح. عملاء Corba الآخرين مثل ACE / TAO جرب جميع عناوين IP ويعملون في هذا التكوين.

نظرا لأنني لست شبكة إله شبكة / كوربا، فليس من واقعي بالنسبة لي أن أحاول تغيير ACE / TAO أو IIOP.NET، ولدينا أسباب وجيهة للحصول على شبكتين منفصلين في هذا النظام، ولكن إذا كان أولا، IP الافتراضي العنوان عاد من قبل WSAIOCtl كانت تلك التي يحتاجها العميل، والتي من شأنها أن تحل المشكلة لأن عنوان IP قد أصبح بعد ذلك أول عنوان IP في سلسلة IOR و IIOP.NET سيستخدم عنوان IP هذا بنجاح. لذلك، هل هناك طريقة موثوقة للتسبب WSAIoctl لإرجاع واجهات الشبكة بأمر مختلف؟ لا أرى أي شيء موثق على MSDN على هذا، لسوء الحظ.

شكرًا،

ديف

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

المحلول

لقد وجدت الحل وأنا أقدم الإجابة في حالة يأتي أي شخص آخر ضد هذا. يحتوي ACE / TAO ORB على معلمة سطر الأوامر يتيح لك تجاوز النتائج التي تم إرجاعها بواسطة WSAIoctl. وبعد المعلمة سطر الأوامر هي -ORBListenEndpoints ويسمح لك بتوفير قائمة محددة من أسماء المضيفين ومحددة الفاصلة المنقوطة. جوجل -ORBListenEndpoints وسوف تكتشف بناء الجملة بالضبط. تتم تهيئة أي خوادم تتم تهيئتها باستخدام ORB التي تتلقى معلمة سطر الأوامر هذه على نقطة النهاية المحددة. لقد اختبرت هذا ويعمل.

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