كيف يمكنك تحديد نطاق المنفذ لمآخذ توصيل Java؟

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

  •  02-07-2019
  •  | 
  •  

سؤال

في Java، يمكنك إعطاء الرقم صفر كمعلمة واحدة لمنشئ المقبس أو DatagramSocket.تقوم Java بربط هذا المقبس بمنفذ مجاني بعد ذلك.هل من الممكن قصر البحث عن المنفذ على نطاق معين؟

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

المحلول

حسنًا، بعد قراءة المستندات، لا أعتقد أنك تستطيع ذلك.يمكنك إما الارتباط بأي منفذ، ثم إعادة الربط إذا كان غير مقبول، أو الربط بشكل متكرر بمنفذ في نطاقك حتى تنجح.الطريقة الثانية ستكون الأكثر "فعالية".

أنا غير مرتاح لهذه الإجابة ، لأنها ...غير أنيق، لكنني حقًا لا أستطيع العثور على أي شيء آخر أيضًا :/

نصائح أخرى

يعد ربط المقبس بأي منفذ مجاني (عادةً) إحدى ميزات دعم المقبس في نظام التشغيل؛انها ليست محددة لجافا.يدعم Solaris، على سبيل المثال، ضبط نطاق المنافذ المؤقتة من خلال بدون تاريخ يأمر.لكن الجذر فقط يمكنه ضبط النطاق، ويؤثر على النظام بأكمله، وليس فقط البرنامج الخاص بك.

إذا كان سلوك الربط المؤقت العادي لا يناسب احتياجاتك، فمن المحتمل أن تضطر إلى كتابة سلوكك الخاص باستخدام المقبس.bind().

إليك الرمز الذي تحتاجه:

public static Socket getListeningSocket() {
    for ( int port = MIN_PORT ; port <= MAX_PORT ; port++ )
    {
        try {
            ServerSocket s = new ServerSocket( port );
            return s;      // no exception means port was available
        } catch (IOException e) {
            // try the next port
        }
    }
    return null;   // port not found, perhaps throw exception?
}

يمكنك إلقاء نظرة سريعة على كود Java الذي ينفذ الوظيفة التي تستخدمها.معظم مكتبات جافا مكتوبة بلغة جافا، لذلك قد ترى ما تحتاجه هناك.

بافتراض أن @Kenster كان على حق وأنها عملية نظام، فقد يتعين عليك ببساطة التكرار عبر المنافذ التي تحاول الارتباط بكل منها أو اختبارها.على الرغم من أنها مؤلمة بعض الشيء، إلا أنها لا ينبغي أن تكون أكثر من بضعة أسطر من التعليمات البرمجية.

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