java.net.ConnectException: رفض الاتصال عندما يتم استدعاء SocketChannel.open

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

  •  21-08-2019
  •  | 
  •  

سؤال

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

import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.nio.channels.SocketChannel;

public class testSocket {

        public static void main(String [] args) {
                try {
                        InetAddress addr = InetAddress.getByName("localhost");
                        InetSocketAddress remoteAddress = new InetSocketAddress(addr, 19015);

                        // Open a new Socket channel and set it to non-blocking
                        SocketChannel socketChannel = SocketChannel.open();
                        socketChannel.configureBlocking(false);

                        // Issue the Connect call on the remote address.
                        socketChannel.connect(remoteAddress);
                } catch (Exception e) {
                        e.printStackTrace();
                }
        }
}

والاستثناء أن أحصل هو

java.net.ConnectException: Connection refused
        at sun.nio.ch.Net.connect(Native Method)
        at sun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:464)
        at testSocket.main(testSocket.java:17)

وأنا تواجه هذه المشكلة مع صن سولاريس وHP - UX. ويبدو أن تعمل بشكل جيد على جهاز لينكس. يمكن لأي شخص أن اسمحوا لي أن أعرف لماذا يتم رفض الاتصال؟ لقد فعلت ذلك ل-a NETSTAT وأكد أن المنفذ لا تكون قيد الاستعمال.

ويرجع الفضل في ذلك مسبقا!

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

المحلول

ومن جافادوك لSocketChannel.connect ()

<اقتباس فقرة>   

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

وعند تشغيل التعليمات البرمجية على لينكس، ربط () إرجاع كاذبة وبالتالي لا يوجد أي استثناء. إذا قمت بإضافة الدعوة إلى socketChannel.finishConnect () سترى نفس السياق رفض استثناء كما يمكنك الحصول على سولاريس / HP-UX.

وأظن أن على سولاريس / HP-UX اتصال () إرجاع صحيح ومن ثم يتم طرح استثناء فورا.

نصائح أخرى

وو"اتصال رفض" الرسالة هي ما ستحصل عندما لا يكون هناك عملية الاستماع على المنفذ المحدد الخاص بك (19015). يبدو أنك تحاول الاتصال بخدمة أنه لا يوجد. NETSTAT وحتى أقول لك أن المنفذ لا تكون قيد الاستعمال!

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