java.net.ConnectException: कनेक्शन ने इनकार कर दिया


185

मैं एक टीसीपी कनेक्शन को लागू करने की कोशिश कर रहा हूं, सर्वर की तरफ से सब कुछ ठीक है, लेकिन जब मैं क्लाइंट प्रोग्राम (क्लाइंट कंप्यूटर से) चलाता हूं तो मुझे निम्नलिखित त्रुटि मिलती है:

java.net.ConnectException: Connection refused
        at java.net.PlainSocketImpl.socketConnect(Native Method)
        at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351)
        at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213)
        at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200)
        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:432)
        at java.net.Socket.connect(Socket.java:529)
        at java.net.Socket.connect(Socket.java:478)
        at java.net.Socket.<init>(Socket.java:375)
        at java.net.Socket.<init>(Socket.java:189)
        at TCPClient.main(TCPClient.java:13)

मैंने उस सॉकेट नंबर को बदलने की कोशिश की जब वह उपयोग में था लेकिन कोई फायदा नहीं हुआ, क्या किसी को पता है कि यह त्रुटि क्या है और इसे कैसे ठीक किया जाए।

सर्वर कोड:

//TCPServer.java

import java.io.*;
import java.net.*;

class TCPServer {
    public static void main(String argv[]) throws Exception {
        String fromclient;
        String toclient;

        ServerSocket Server = new ServerSocket(5000);

        System.out.println("TCPServer Waiting for client on port 5000");

        while (true) {
            Socket connected = Server.accept();
            System.out.println(" THE CLIENT" + " " + connected.getInetAddress()
                    + ":" + connected.getPort() + " IS CONNECTED ");

            BufferedReader inFromUser = new BufferedReader(
                    new InputStreamReader(System.in));

            BufferedReader inFromClient = new BufferedReader(
                    new InputStreamReader(connected.getInputStream()));

            PrintWriter outToClient = new PrintWriter(
                    connected.getOutputStream(), true);

            while (true) {

                System.out.println("SEND(Type Q or q to Quit):");
                toclient = inFromUser.readLine();

                if (toclient.equals("q") || toclient.equals("Q")) {
                    outToClient.println(toclient);
                    connected.close();
                    break;
                } else {
                    outToClient.println(toclient);
                }

                fromclient = inFromClient.readLine();

                if (fromclient.equals("q") || fromclient.equals("Q")) {
                    connected.close();
                    break;
                } else {
                    System.out.println("RECIEVED:" + fromclient);
                }

            }

        }
    }
}

ग्राहक कोड:

//TCPClient.java

import java.io.*;
import java.net.*;

class TCPClient {
    public static void main(String argv[]) throws Exception {
        String FromServer;
        String ToServer;

        Socket clientSocket = new Socket("localhost", 5000);

        BufferedReader inFromUser = new BufferedReader(new InputStreamReader(
                System.in));

        PrintWriter outToServer = new PrintWriter(
                clientSocket.getOutputStream(), true);

        BufferedReader inFromServer = new BufferedReader(new InputStreamReader(
                clientSocket.getInputStream()));

        while (true) {

            FromServer = inFromServer.readLine();

            if (FromServer.equals("q") || FromServer.equals("Q")) {
                clientSocket.close();
                break;
            } else {
                System.out.println("RECIEVED:" + FromServer);
                System.out.println("SEND(Type Q or q to Quit):");

                ToServer = inFromUser.readLine();

                if (ToServer.equals("Q") || ToServer.equals("q")) {
                    outToServer.println(ToServer);
                    clientSocket.close();
                    break;
                } else {
                    outToServer.println(ToServer);
                }
            }
        }
    }
}

क्या आप ग्राहक कोड पोस्ट कर सकते हैं? यदि यह एक दूरस्थ ग्राहक है तो सुनिश्चित करें कि आपके पास कोई फ़ायरवॉल समस्या नहीं है!
घर

मैं दोनों क्लाइंट और सर्वर और अभी भी एक ही समस्या पर फ़ायरवॉल बंद कर दिया
सामन्था कैटेनिया

2
सर्वर किस इंटरफेस पर सुन रहा है। यदि आप केवल लोकलहोस्ट पर सुन रहे हैं, तो आप दूरस्थ रूप से कनेक्ट नहीं कर सकते।
थोरबजोरन रावन एंडरसन

मैं लोकलहोस्ट, फेस पाम का उपयोग करते हुए दूर से कनेक्ट करने की कोशिश कर रहा था। टीसीपी> के साथ यह मेरा पहला परीक्षण है। मैं इसे दूर से कैसे काम करूं?
सामंथा कैटेनिया

याद रखें कि आपके पास कुछ 'नंगे धातु' हार्डवेयर फ़ायरवॉल भी हो सकते हैं ... क्या यह काम करता है यदि क्लाइंट और सर्वर एक ही बॉक्स पर हैं?
घर

जवाबों:


322

इस अपवाद का अर्थ है कि आप जिस आईपी / पोर्ट से जुड़ने की कोशिश कर रहे हैं, उस पर कोई सेवा नहीं है:

  • आप गलत IP / होस्ट या पोर्ट से कनेक्ट करने का प्रयास कर रहे हैं।
  • आपने अपना सर्वर शुरू नहीं किया है।
  • आपका सर्वर कनेक्शन के लिए नहीं सुन रहा है।
  • विंडोज सर्वर पर, बैकलॉग कतार को भरा हुआ है।

52
मुझे लगता है कि अनदेखी के लिए गूंगा लगता है You have not started your server, लेकिन यह वास्तव में मेरे लिए समस्या थी!
एलेक्सिस लेक्लर्क

बस बात को स्पष्ट करने के लिए - "जावा कोर बस ठीक है"। केवल समस्या हम मुद्दों को नजरअंदाज कर रहे हैं .. (सर्वर राज्य, ipaddress, पोर्ट, इंटरनेट कनेक्टिविटी - एक ही राउटर पर होना स्थानीय IP के और अधिक के लिए होना चाहिए)
विनय भार्गव

1
Collin, 'सर्वर कनेक्शन स्वीकार करने के लिए इंतजार नहीं कर रहा है' से आपका वास्तव में क्या मतलब है? लोग इसे चारों ओर से तोता मान रहे हैं जैसे कि इसका मतलब कुछ हो।
लोर्न

मैंने इसे कुछ समय पहले लिखा था, लेकिन मुझे लगता है कि मेरा मतलब यह है कि आपने अपना सर्वर शुरू नहीं किया है।
कोलिन मूल्य

मेरे मामले में मेरे पास चार Gennymotion सिमुलेटर चल रहे थे और मैं गैलेक्सी टैब पर ऐप लोड करने की कोशिश कर रहा था और मुझे यह त्रुटि मिल रही थी। मित्र WEB से बहुत कुछ पढ़ने के बाद, मैंने तब सभी सिमुलेटर और ग्रहण को बंद कर दिया, कार्य प्रबंधक में ADP को मार दिया और फिर ग्रहण को फिर से शुरू किया और सब कुछ ठीक से काम करना शुरू कर दिया। मुझे लगता है कि जब आपके पास कई सिमुलेटर चल रहे होते हैं और फिर आप डिवाइस कनेक्ट करने की कोशिश करते हैं, तो एडीबी मेरे अनुभव में पागल हो जाता है। वो मेरे दो सेंट हैं ... :)
विंसी

39

मैं जाँच करूँगा:

  • होस्ट नाम और पोर्ट जिसे आप कनेक्ट करने का प्रयास कर रहे हैं
  • सर्वर साइड सही ढंग से सुनना शुरू करने में कामयाब रहा है
  • कनेक्शन को अवरुद्ध करने वाला कोई फ़ायरवॉल नहीं है

सबसे सरल प्रारंभिक बिंदु संभवतः टेलनेट या पुट्टी का उपयोग करके क्लाइंट मशीन से मैन्युअल रूप से कनेक्ट करने का प्रयास करना है। यदि वह सफल होता है, तो समस्या आपके क्लाइंट कोड में है। यदि ऐसा नहीं होता है, तो आपको वर्कआउट करने की आवश्यकता है कि यह क्यों नहीं है। इस मोर्चे पर Wireshark आपकी मदद कर सकता है।


मुझे यह अपवाद कभी-कभी मिलता है। यह समय की एक विशेष अवधि के लिए होता है। यह तुरंत इस अपवाद को फेंक देता है। और फिर सब ठीक हो जाता है। मेरे पास सर्वर में एक फ़ायरवॉल है। लेकिन मैंने पोर्ट 8080 पर आने वाले कनेक्शन की अनुमति देने के लिए एक इनबाउंड नियम जोड़ा है। क्या नियम को कभी-कभी अनदेखा किया जाता है?
अश्विन

@ अश्विन: यह कहना असंभव है, वास्तव में - आपको डेटा के प्राप्त होने तक ठीक से काम करने की आवश्यकता होगी। अपने फ़ायरवॉल लॉग आदि को देखें
जॉन स्कीट

@JonSkeet अगर हमारे पास यह त्रुटि है तो अपने फ़ायरवॉल को कैसे कॉन्फ़िगर करें?
निखिल पारीक

1
@Nikhil: मुझे लगता है कि जवाब देने के लिए योग्य नहीं हूँ, लेकिन मैं किसी को जो संदिग्ध है योग्य एक बहुत अधिक जानकारी की आवश्यकता होगी तुम्हारी मदद करने में सक्षम हो। (एक बात के लिए, हमें नहीं पता कि आपके पास क्या फ़ायरवॉल है ...)
जॉन स्कीट

6

आपको अपने क्लाइंट सॉकेट को दूरस्थ सर्वर सॉकेट से कनेक्ट करना होगा। के बजाय

Socket clientSocket = new Socket("localhost", 5000);

करना

Socket clientSocket = new Socket(serverName, 5000);

क्लाइंट को सर्वरनाम से कनेक्ट होना चाहिए जो उस बॉक्स के नाम या आईपी से मेल खाना चाहिए, जिस पर आपका इंस्टेंटिमिटेडServerSocket था (नाम ग्राहक मशीन से उपलब्ध होना चाहिए)। BTW: यह महत्वपूर्ण नाम नहीं है, यह सभी IP पते के बारे में है ...


मुझे लगता है कि वह उन दोनों को परीक्षण के उद्देश्यों के लिए एक ही मशीन पर चला रहा है, यही वजह है कि लोकलहोस्ट उपयोग करने के लिए ठीक होगा
एसई

@ ऐरन: उसने कहा कि यह काम करता है अगर क्लाइंट और सर्वर एक ही मशीन पर चलते हैं (आप दूसरी टिप्पणी में जवाब पा सकते हैं)।
घर में

'उपर्युक्त पंक्ति सॉकेट को लोकलहोस्ट को बांधती है' नहीं, ऐसा नहीं है, यह इसे INADDR_ANY से बांधता है। यह किसी भी एनआईसी के माध्यम से कनेक्शन स्वीकार करने की अनुमति देता है। ओपी जो कर रहा है वह पहले से ही सही है। उत्तर पूरी तरह से गलत है। Downvoting।
लोर्न

@ ईजेपी: आप सही हैं ServerSocket, मैंने उत्तर को संशोधित कर दिया है। फिर भी, clientSocketअभी भी कनेक्ट करने की कोशिश करता है localhost
होम

@ आपको बाइंड पते के बारे में वाक्यांश निकालना होगा।
लोर्ने जूल का Marquis

6

मुझे एक ही समस्या थी, लेकिन क्लाइंट को चलाने से पहले सर्वर को चलाने से इसे ठीक किया गया।


3
बेशक आपको क्लाइंट से पहले सर्वर को चलाना होगा। क्लाइंट को पहले चलाना और सर्वर से कनेक्ट करने की कोशिश करने का मतलब है कि जब आप अपने सर्वर को आग लगाते हैं तो आप कुछ भी नहीं जोड़ रहे हैं।
user3308043

4
@ user3308043 हां यह स्पष्ट था, लेकिन कुछ नए प्रोग्रामर (जैसे खुद 3 साल पहले) के लिए यह बहुत स्पष्ट नहीं था, इसलिए मैं सिर्फ उन फॉलोवर्स के साथ इसे साझा करना चाहता था जो मेरे जैसे क्लूलेस थे।
दाओ लाम

धन्यवाद, यह भी मेरी मदद की, परीक्षण कनेक्शन succesfull था, लेकिन कोई तालिका डेटा नहीं दिखा सका।
डेमियन क्रिस्टोफ

5

एक बिंदु जो मैं उपरोक्त उत्तरों में जोड़ना चाहूंगा वह मेरा अनुभव है -

"मैंने लोकलहोस्ट पर अपने सर्वर पर होस्ट किया था और उचित URL की तरह निर्दिष्ट करके एक एंड्रॉइड एमुलेटर के माध्यम से इसे कनेक्ट करने की कोशिश कर http://localhost/my_api/login.phpरहा था। और मुझे कनेक्शन से मना किया जा रहा था "

ध्यान दें - जब मैं सिर्फ पीसी पर ब्राउजर में गया था और उसी URL ( http://localhost/my_api/login.php) का उपयोग कर रहा था तो मुझे सही प्रतिक्रिया मिल रही थी

इसलिए मेरे मामले में समस्या वह शब्द था localhostजिसे मैंने अपने सर्वर के लिए आईपी ​​के साथ बदल दिया था (जैसा कि आपके सर्वर को आपकी मशीन पर होस्ट किया जाता है) जिसने इसे उसी पीसी पर मेरे एमुलेटर से पहुंच योग्य बना दिया।


अपनी स्थानीय मशीन के लिए IP प्राप्त करने के लिए, आप ipconfigcmd पर कमांड का उपयोग कर सकते हैं आपको IPv4 कुछ मिलेगा जैसे 192.68.xx.yy Voila .. आपकी मशीन का IP जहां आपके सर्वर पर होस्ट किया गया है। इसके बाद लोकलहोस्ट के बजाय इसका उपयोग करें

http://192.168.72.66/my_api/login.php


नोट - आप इस कंप्यूटर के बाहर किसी भी नोड से इस निजी आईपी तक नहीं पहुँच पाएंगे। (यदि आपको जरूरत है, तो आप इसके लिए Ngnix का उपयोग कर सकते हैं)


4

मुझे Mqtt ब्रोकर के साथ एक ही समस्या थी जिसे vernemq.but कहा जाता है, इसे निम्नलिखित जोड़कर हल किया।

  1. $ sudo vmq-admin listener show

वर्नमेक के लिए ips और बंदरगाहों की अनुमति दी गई सूची दिखाने के लिए

  1. $ sudo vmq-admin listener start port=1885 -a 0.0.0.0 --mountpoint /appname --nr_of_acceptors=10 --max_connections=20000

किसी भी आईपी और अपने नए पोर्ट को जोड़ने के लिए। अब आप बिना किसी समस्या के जुड़ सकते हैं।

आशा है कि यह आपकी समस्या को हल कर देगा। यहां छवि विवरण दर्ज करें


1
इसने मेरा दिन बचा लिया, लेकिन चूंकि वर्मेक एप्ट-गेट के साथ स्थापित नहीं होता है, इसलिए कुछ लोगों को इस लिंक की आवश्यकता होगी: vernemq.com/docs/installation/debian_and_ubuntu.html
डेमीर ओलेजर

2

आशा है कि मेरा अनुभव किसी के लिए उपयोगी हो सकता है। मुझे एक ही अपवाद स्टैक ट्रेस के साथ समस्या का सामना करना पड़ा और मैं समझ नहीं सका कि समस्या क्या थी। डेटाबेस सर्वर जिसे मैं कनेक्ट करने का प्रयास कर रहा था वह चल रहा था और पोर्ट खुला था और कनेक्शन स्वीकार कर रहा था।

मुद्दा इंटरनेट कनेक्शन के साथ था। इंटरनेट कनेक्शन जो मैं उपयोग कर रहा था, उसे संबंधित सर्वर से कनेक्ट करने की अनुमति नहीं थी। जब मैंने कनेक्शन विवरण बदल दिया, तो समस्या हल हो गई।


1

मेरे मामले में, मैंने सॉकेट को सर्वर का नाम दिया (मेरे मामले में "raspberrypi"), और इसके बजाय IPv4 पते ने इसे बनाया, या निर्दिष्ट करने के लिए, IPv6 को तोड़ा गया (नाम IPv6 के लिए हल किया गया)


1

मेरे मामले में, मैं एक जाँच चिह्न के पास डाल करने के लिए किया था Expose daemon on tcp://localhost:2375 without TLSमें docker(कार्य पट्टी के दाईं ओर, सही पर क्लिक करें सेटिंग docker, चयन setting)


1

मुझे यह त्रुटि मिली क्योंकि मैं ServerSocketएक लूप के अंदर बंद हो गया, जो इसके अंदर ग्राहकों की संख्या को स्वीकार करने की कोशिश करता है (मैंने सभी क्लीनिकों को स्वीकार नहीं किया)

इसलिए सावधान रहें कि अपने सॉकेट को कहाँ बंद करें


0

मेरे पास एक ही समस्या थी और समस्या यह थी कि मैं सॉकेट ऑब्जेक्ट को बंद नहीं कर रहा था। सॉकेट का उपयोग करने के बाद। क्लोज (); समस्या सुलझ गयी। यह कोड मेरे लिए काम करता है।

ClientDemo.java

public class ClientDemo {
    public static void main(String[] args) throws UnknownHostException,
            IOException {
        Socket socket = new Socket("127.0.0.1", 55286);
        OutputStreamWriter os = new OutputStreamWriter(socket.getOutputStream());
        os.write("Santosh Karna");
        os.flush();
        socket.close();
    }
}

और ServerDemo.java

public class ServerDemo {
    public static void main(String[] args) throws IOException {
        System.out.println("server is started");
        ServerSocket serverSocket= new ServerSocket(55286);
        System.out.println("server is waiting");
        Socket socket=serverSocket.accept();
        System.out.println("Client connected");
        BufferedReader reader=new BufferedReader(new InputStreamReader(socket.getInputStream()));
        String str=reader.readLine();
        System.out.println("Client data: "+str);
        socket.close();
        serverSocket.close();

    }
}

1
क्लाइंट सॉकेट बंद नहीं करने से कनेक्शन मना नहीं होता है। वहाँ नहीं होता हो पास करने के लिए एक ग्राहक सॉकेट यदि कनेक्शन अस्वीकार कर दिया गया था।
लोर्ने

0

मैंने अपना DNS नेटवर्क बदल दिया और इसने समस्या को ठीक कर दिया


-2

मेरे पास एक ही मुद्दा था, और यह catalina.outफ़ाइल की अनुमति सही नहीं होने के कारण निकला । यह टॉमकैट उपयोगकर्ता द्वारा लिखने योग्य नहीं था। एक बार जब मैंने अनुमति तय कर दी, तो समस्या हल हो गई। मुझे पता चला कि यह tomcat8-initd.logफ़ाइल में लॉग से एक अनुमति समस्या है :

/usr/sbin/tomcat8: line 40: /usr/share/tomcat8/logs/catalina.out: Permission denied


1
'अनुमति से इनकार ’वैसी बात नहीं है जैसा कि' कनेक्शन ने इनकार कर दिया’।
लोर्ने

अनुमति से इनकार की गई त्रुटि tomcat8-initd.logफ़ाइल में थी, जबकि सर्वर आउटपुट लॉग में प्रश्न में उल्लिखित त्रुटि थी।
kbsbng

-3

यह हो सकता है कि पोर्ट 5000 पर अभी भी क्लाइंट को चलाने और सुनने का एक पिछला उदाहरण है।


6
ग्राहक सुनते नहीं। वे बात करते हैं।
राडवल्ड

पिछला उदाहरण BindExceptionसर्वर ConnectExceptionपर नहीं, क्लाइंट पर होगा।
लोर्न
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.