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
সার্ভারটি কী ইন্টারফেস শুনছে। আপনি যদি কেবল লোকালহোস্টে শুনছেন তবে আপনি দূর থেকে সংযোগ করতে পারবেন না।
থরবজর্ন রাভন অ্যান্ডারসন

লোকালহোস্ট, ফেস পাম ব্যবহার করার সময় আমি দূর থেকে সংযোগ দেওয়ার চেষ্টা করছিলাম। এটি টিসিপি> এর সাথে আমার প্রথম ট্রায়াল। << আমি কীভাবে এটি দূরবর্তীভাবে কাজ করব?
সামান্থা কাতানিয়া

মনে রাখবেন যে আপনার মাঝে কিছু 'বেয়ার মেটাল' হার্ডওয়্যার ফায়ারওয়াল থাকতে পারে ... যদি ক্লায়েন্ট এবং সার্ভার একই বাক্সে থাকে তবে এটি কী কাজ করবে?
বাড়ি

উত্তর:


321

এই ব্যতিক্রমটির অর্থ এই যে আপনি যে আইপি / পোর্টটিতে সংযোগের চেষ্টা করছেন তাতে কোনও পরিষেবা শুনছে না:

  • আপনি ভুল আইপি / হোস্ট বা পোর্টের সাথে সংযোগ দেওয়ার চেষ্টা করছেন।
  • আপনি আপনার সার্ভার শুরু করেন নি।
  • আপনার সার্ভার সংযোগের জন্য শুনছে না।
  • উইন্ডোজ সার্ভারগুলিতে, শোনার ব্যাকলগ সারি পূর্ণ।

51
আমি অবহেলা করার জন্য বোবা বোধ করি You have not started your server, তবে এটি আমার পক্ষে সমস্যা ছিল!
অ্যালেক্সিস লেকার্ক

শুধু বিষয়টি পরিষ্কার করার জন্য - "জাভা কোর ঠিক আছে"। কেবল সমস্যা হ'ল আমরা সমস্যাগুলি উপেক্ষা করছি .. (সার্ভারের রাজ্য, আইপ্যাড্রেস, পোর্ট, ইন্টারনেট সংযোগ - একই রাউটারে থাকা স্থানীয় আইপি এবং আরও বেশি
কিছুের

1
কলিন, 'সার্ভার সংযোগ গ্রহণের অপেক্ষায় নেই' বলতে কী বোঝায়? লোকেরা এটিকে চারদিকে ছড়িয়ে দিচ্ছে যেন এর কিছু অর্থ।
মারকুইস অফ লর্ন

আমি এটি কিছুক্ষণ আগে লিখেছিলাম তবে আমি মনে করি এটি বোঝানোর অন্য উপায় হিসাবে আপনি আপনার সার্ভারটি শুরু করেন নি।
কলিন দাম

আমার ক্ষেত্রে আমার চারটি জেনিমোশন সিমুলেটর চলছিল এবং আমি গ্যালাক্সি ট্যাবে অ্যাপটি লোড করার চেষ্টা করছিলাম এবং আমি এই ত্রুটিটি পেয়েছি। বন্ধু ডব্লিউইবির কাছ থেকে অনেকগুলি পড়ার পরে, আমি তখন সমস্ত সিমুলেটর এবংগ্রহণ বন্ধ করে দিয়েছিলাম, টাস্ক ম্যানেজারের এডিপি মেরেছিলাম এবং তারপরে পুনরায় সূচনাটি শুরু করি এবং সবকিছু সঠিকভাবে কাজ শুরু করে। আমি মনে করি যখন আপনার একাধিক সিমুলেটর চলমান থাকে এবং তারপরে আপনি ডিভাইসটি সংযুক্ত করার চেষ্টা করেন, তখন এডিবি আমার অভিজ্ঞতায় বাদ যায়। এগুলি আমার দুটি সেন্ট ... :)
ভিনসি

39

আমি যাচাই করতাম:

  • হোস্টের নাম এবং পোর্ট আপনি সংযোগের চেষ্টা করছেন
  • সার্ভার পক্ষটি সঠিকভাবে শুনতে শুরু করেছে
  • সংযোগটি আটকাচ্ছে এমন কোনও ফায়ারওয়াল নেই

সহজ শুরুর পয়েন্টটি সম্ভবত টেলনেট বা পুট্টি ব্যবহার করে ক্লায়েন্ট মেশিন থেকে ম্যানুয়ালি সংযোগ করার চেষ্টা করা। যদি এটি সফল হয়, তবে সমস্যাটি আপনার ক্লায়েন্ট কোডে রয়েছে। যদি এটি না হয় তবে আপনার কেন এটি হয়নি তা নিয়ে কাজ করা দরকার । ওয়্যারশার্ক আপনাকে এই ফ্রন্টে সহায়তা করতে পারে।


আমি মাঝে মাঝে এই ব্যতিক্রম পাই। এটি একটি নির্দিষ্ট সময়ের জন্য ঘটে। এটি অবিলম্বে এই ব্যতিক্রম ছোঁড়ে th এবং তারপরে সবকিছু ঠিক হয়ে যায়। আমার সার্ভারে একটি ফায়ারওয়াল রয়েছে। তবে আমি 8080 বন্দরে আগত সংযোগের অনুমতি দেওয়ার জন্য একটি অভ্যন্তরীণ নিয়ম যুক্ত করেছি the নিয়মটি কি কখনও কখনও উপেক্ষা করা হয়?
আশ্বিন

@ অশ্বউইন: সত্যিই বলা অসম্ভব - আপনাকে তথ্যটি কতটা দূরে পাবে ঠিক তা নিয়ে কাজ করা দরকার। আপনার ফায়ারওয়াল লগ ইত্যাদি দেখুন
জন স্কিটি

@ জোনস্কিট কীভাবে আমাদের ফায়ারওয়ালটি কনফিগার করবেন যদি আমাদের এই ত্রুটি থাকে?
নিখিল পরীক

1
@Nikhil: আমি যে উত্তর দিতে যোগ্যতাসম্পন্ন নই, কিন্তু আমি সন্দেহভাজন যারা হয় যোগ্যতাসম্পন্ন আরো অনেক তথ্য প্রয়োজন হবে আপনাকে সাহায্য করার জন্য পাবে। (একটি কিছুর জন্য, আপনার ফায়ারওয়াল কী তা আমরা জানি না ...)
জন স্কিটি

6

আপনাকে আপনার ক্লায়েন্ট সকেটকে রিমোট সার্ভারসকেটে সংযুক্ত করতে হবে। পরিবর্তে

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

করা

Socket clientSocket = new Socket(serverName, 5000);

ক্লায়েন্টকে অবশ্যই সার্ভারনামের সাথে সংযোগ স্থাপন করতে হবে যা আপনার যে বক্সে ServerSocketইনস্ট্যান্ট করা হয়েছিল তার নাম বা আইপিটির সাথে মিল থাকতে হবে (ক্লায়েন্ট মেশিন থেকে নামটি অবশ্যই পৌঁছাতে হবে)। বিটিডাব্লু: এটি যে নামটি গুরুত্বপূর্ণ তা নয়, এটি সমস্ত আইপি অ্যাড্রেস সম্পর্কে ...


আমি অনুমান তিনি উদ্দেশ্যে পরীক্ষা যার কারণে স্থানীয় হোস্ট ব্যবহার করতে জরিমানা হতে করবে একই মেশিনে তাদের উভয় চলমান
দঃপূঃ

@ অ্যারন: তিনি বলেছিলেন যে ক্লায়েন্ট এবং সার্ভার একই মেশিনে চালিত হলে এটি কার্যকর হয় (আপনি অন্য মন্তব্যে উত্তরটি খুঁজে পেতে পারেন)।
বাড়ি

'উপরের সারিটি সকেটটি লোকালহোস্টের সাথে আবদ্ধ করে' না এটি তা নয়, এটি INADDR_ANY এ আবদ্ধ করে। এটি এটিকে যে কোনও এনআইসির মাধ্যমে সংযোগ গ্রহণ করতে দেয়। ওপি যা করছে তা ইতিমধ্যে সঠিক। উত্তর সম্পূর্ণ ভুল। Downvoting।
মার্কুইস

@ ইজেপি: আপনি ঠিক বলেছেন ServerSocket, আমি উত্তরটি সংশোধন করেছি। তবুও, clientSocketএখনও সংযোগ দেওয়ার চেষ্টা করে localhost
বাড়ি

@ হোম আপনার বাঁধাইয়ের ঠিকানা সম্পর্কে বাক্যাংশ সরিয়ে ফেলতে হবে।
মারকুইস লার্নের

6

আমার একই সমস্যা ছিল, তবে ক্লায়েন্টটি চালানোর আগে সার্ভার চালানো এটি ঠিক করে দিয়েছে।


3
অবশ্যই ক্লায়েন্টের আগে আপনাকে সার্ভার চালাতে হবে। ক্লায়েন্টকে প্রথমে চালানো এবং সার্ভারের সাথে সংযোগ দেওয়ার চেষ্টা করার অর্থ আপনি যখন আপনার সার্ভারটি জ্বালান তখন আপনি কোনও কিছুর সাথে সংযুক্ত হন না।
ব্যবহারকারী3308043

4
@ ইউজার ৩৩০৮০৩৩ হ্যাঁ এটি সুস্পষ্ট ছিল তবে কিছু নতুন প্রোগ্রামারদের পক্ষে এটি খুব স্পষ্ট ছিল না (যেমনটি আমার নিজের মতো 3 বছর আগে) সুতরাং আমি কেবল তাদের মতো যারা আমার মতো অনর্থক ছিল তাদের সাথে এটি ভাগ করে নিতে চাই।
দাও লাম

ধন্যবাদ, এটি আমাকেও সহায়তা করেছিল, পরীক্ষার সংযোগটি সফল ছিল তবে কোনও টেবিলের ডেটা প্রদর্শন করতে পারেনি।
ড্যামিয়েন ক্রিস্টোফ

5

উপরের উত্তরগুলিতে আমি যুক্ত করতে চাই এমন একটি বিষয় হ'ল আমার অভিজ্ঞতা -

"আমি আমার সার্ভারে হোস্ট স্থানীয় হোস্ট এবং একটি মাধ্যমে এতে সংযোগ করার চেষ্টা ছিল অ্যান্ড্রয়েড এমুলেটর মত উপযুক্ত URL নির্দিষ্ট করে http://localhost/my_api/login.php। আর আমি পেয়ে ছিল সংযোগ প্রত্যাখ্যান করেছে ত্রুটি "

লক্ষ করার বিষয় - আমি যখন পিসিতে ব্রাউজারে গিয়েছিলাম এবং একই ইউআরএল ( http://localhost/my_api/login.php) ব্যবহার করি তখন আমি সঠিক প্রতিক্রিয়া পাচ্ছিলাম

সুতরাং আমার ক্ষেত্রে সমস্যাটি হ'ল সেই শব্দটি localhostযা আমি আমার সার্ভারের আইপি দিয়ে প্রতিস্থাপন করেছি (যেমন আপনার সার্ভারটি আপনার মেশিনে হোস্ট করা হয়েছে) যা এটি একই পিসিতে আমার এমুলেটর থেকে পৌঁছতে সক্ষম করে তুলেছিল।


আপনার স্থানীয় মেশিনের জন্য আইপি পেতে, আপনি ipconfigসিএমডি-তে কমান্ড ব্যবহার করতে পারেন আপনি 192v8.xx.yy ভয়েলা এর মতো আইপিভি 4 পাবেন ... এটি আপনার মেশিনের আইপি যেখানে আপনি আপনার সার্ভার হোস্ট করেছেন। লোকালহোস্টের পরিবর্তে এটি ব্যবহার করুন

http://192.168.72.66/my_api/login.php


দ্রষ্টব্য - আপনি এই কম্পিউটারের বাইরের কোনও নোড থেকে এই ব্যক্তিগত আইপিটিতে পৌঁছাতে পারবেন না। (আপনার যদি প্রয়োজন হয় তবে আপনি তার জন্য এনগনিক্স ব্যবহার করতে পারেন)


4

আমার এমকিটিটি ব্রোকারের সাথে ভেরেনেমকিউ নামক একই সমস্যা ছিল তবে এটি নিম্নলিখিত যুক্ত করে সমাধান করেছে।

  1. $ sudo vmq-admin listener show

o vernemq এর জন্য অনুমতিপ্রাপ্ত আইপিএস এবং পোর্টগুলির তালিকা প্রদর্শন করতে

  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

আমার ক্ষেত্রে, আমি সকেটটি সার্ভারটির নাম দিয়েছি (আমার ক্ষেত্রে "রাস্পবেরিপি"), এবং পরিবর্তে একটি আইপিভি 4 ঠিকানা এটি তৈরি করেছে, বা নির্দিষ্ট করার জন্য, আইপিভি 6 নষ্ট হয়ে গেছে (নামটি একটি আইপিভি 6-র সমাধান হয়েছে)


1

আমার ক্ষেত্রে, আমি একটি টিক চিহ্ন কাছাকাছি রাখা ছিল Expose daemon on tcp://localhost:2375 without TLSমধ্যে docker(টাস্ক বারে ডান দিকে, ডান-এ ক্লিক করুন সেটিংটি dockerনির্বাচন setting)


1

আমি এই ত্রুটিটি পেয়েছি কারণ আমি ServerSocketএকটি লুপের ভিতরে এটি বন্ধ করে দিয়েছি যা এর ভিতরে থাকা ক্লায়েন্টের সংখ্যা গ্রহণ করার চেষ্টা করে (আমি সমস্ত ক্লিন্ট গ্রহণ করা শেষ করি না)

সুতরাং আপনার সকেটটি কোথায় বন্ধ করবেন সে বিষয়ে সতর্কতা অবলম্বন করুন


0

আমার একই সমস্যা ছিল এবং সমস্যাটি হ'ল আমি সকেট অবজেক্টটি বন্ধ করছিলাম না socসকেট.ক্লোজ () ব্যবহার করার পরে; সমস্যা সমাধান. এই কোডটি আমার পক্ষে কাজ করে।

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();
    }
}

এবং সার্ভারডেমো.জভা

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

আমি আমার ডিএনএস নেটওয়ার্ক পরিবর্তন করেছি এবং এটি সমস্যার সমাধান করেছে


-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
মারকুইস অফ লর্ন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.