desarrollo-web-br-bd.com

java.net.ConnectException: conexión rechazada

Estoy intentando implementar una conexión TCP, todo funciona bien desde el lado del servidor, pero cuando ejecuto el programa cliente (desde la computadora cliente) obtengo el siguiente error:

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)

Intenté cambiar el número de socket en caso de que estuviera en uso, pero no sirvió de nada, ¿alguien sabe qué está causando este error y cómo solucionarlo?.

El código del servidor:

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

            }

        }
    }
}

El código del cliente:

//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);
                }
            }
        }
    }
}
158
Samantha Catania

Esta excepción significa que no hay servicio escuchando en la IP/puerto al que intenta conectarse:

  • Está intentando conectarse al IP/Host o puerto incorrecto.
  • No has iniciado tu servidor.
  • Su servidor no está escuchando las conexiones.
  • En los servidores de Windows, la cola de atrasos de escucha está llena.
278
Collin Price

Me gustaría comprobar:

  • Nombre de host y puerto al que intenta conectarse
  • El lado del servidor ha logrado comenzar a escuchar correctamente.
  • No hay firewall bloqueando la conexión.

El punto de inicio más sencillo es probablemente intentar conectarse manualmente desde la máquina cliente mediante telnet o PuTTY. Si eso tiene éxito, entonces el problema está en el código de su cliente. Si no es así, necesita resolver por qué no lo ha hecho. Wireshark puede ayudarte en este frente.

34
Jon Skeet

Tuve el mismo problema, pero ejecutar el servidor antes de ejecutar el cliente lo solucionó.

6
Dao Lam

Tuve el mismo problema con el agente Mqtt llamado vernemq.but lo resolvió agregando lo siguiente.

  1. $ Sudo vmq-admin listener show

para mostrar la lista de ips y puertos permitidos para vernemq

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

para agregar cualquier ip y su nuevo puerto. Ahora debes poder conectarte sin ningún problema.

Espero que resuelva tu problema.  enter image description here

4
MrOnyancha

Debe conectar el socket de su cliente al ServerSocket remoto. En lugar de

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

hacer

Socket clientSocket = new Socket(serverName, 5000);

El cliente debe conectarse a serverName que debe coincidir con el nombre o IP de la casilla en la que se creó una instancia de su ServerSocket (el nombre debe ser accesible desde la máquina cliente). Por cierto: no es el nombre lo que importa, se trata de direcciones IP ...

4
home

Espero que mi experiencia pueda serle de utilidad a alguien. Enfrenté el problema con el mismo seguimiento de la pila de excepciones y no pude entender cuál era el problema. El servidor de la base de datos que estaba intentando conectar se estaba ejecutando y el puerto estaba abierto y aceptaba conexiones.

El problema fue con la conexión a internet. La conexión a Internet que estaba usando no tenía permiso para conectarse al servidor correspondiente. Cuando cambié los detalles de la conexión, el problema se resolvió.

2
phoenix

Un punto que me gustaría agregar a las respuestas anteriores es mi experiencia -

"Me alojé en mi servidor en localhost y estaba intentando conectarme a través de un emulador de Android especificando la URL adecuada como http://localhost/my_api/login.php. Y estaba obteniendo error de conexión rechazada "

Punto a nota - Cuando fui al navegador en la PC y usé la misma URL (http://localhost/my_api/login.php) Recibí la respuesta correcta

por lo que el problema en mi caso fue el término localhost que reemplazé conIPpara mi servidor (ya que su servidor está alojado en su máquina) que lo hizo accesible desde mi emulador en la misma PC.


Para obtener IP para su máquina local, puede usar el comando ipconfig en cmd y obtendrá IPv4 algo así como 192.68.xx.yy Voila .. esa es la IP de su máquina donde tiene alojado su servidor. usalo entonces en lugar de localhost

http://192.168.72.66/my_api/login.php


Nota: no podrá acceder a esta IP privada desde ningún nodo fuera de esta computadora. (En caso de que lo necesite, puede usar Ngnix para eso)

1
eRaisedToX

En mi caso, tuve que colocar una marca de verificación cerca de Expose daemon on tcp://localhost:2375 without TLS en la configuración de docker (en el lado derecho de la barra de tareas, haga clic con el botón derecho en docker, seleccione setting)

1
user1419243

En mi caso, le di al socket el nombre del servidor (en mi caso "raspberrypi"), y en su lugar, una dirección IPv4 la creó, o para especificar, IPv6 se rompió (el nombre se resolvió como un IPv6)

1
Zhyano

recibí este error porque cerré ServerSocket dentro de un bucle for que intenta aceptar el número de clientes que contiene (no terminé de aceptar todos los clints)

así que ten cuidado donde cerrar tu zócalo

1
Basheer AL-MOMANI

Tuve el mismo problema y el problema era que no estaba cerrando el objeto socket.Después de usar socket.close (); problema resuelto. Este código funciona para mí.

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

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

    }
}
0
Santosh Karna

Tuve el mismo problema, y ​​resultó que el permiso del archivo catalina.out no era correcto. No fue escribible por el usuario de Tomcat. Una vez que arreglé los permisos, el problema se resolvió. Tengo que saber que es un problema de permisos de los registros en el archivo Tomcat8-initd.log:

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

0
kbsbng

Número de puerto siempre diferente en ambos extremos.

0
Harshil Kulkarni