java.net.ConnectException: Connection refused

JavaNetworkingTcp

Java Problem Overview


I'm trying to implement a TCP connection, everything works fine from the server's side but when I run the client program (from client computer) I get the following 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)

I tried changing the socket number in case it was in use but to no avail, does anyone know what is causing this error & how to fix it.

The Server Code:

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

			}

		}
	}
}

The Client Code:

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

Java Solutions


Solution 1 - Java

This exception means that there is no service listening on the IP/port you are trying to connect to:

  • You are trying to connect to the wrong IP/Host or port.
  • You have not started your server.
  • Your server is not listening for connections.
  • On Windows servers, the listen backlog queue is full.

Solution 2 - Java

I would check:

  • Host name and port you're trying to connect to
  • The server side has managed to start listening correctly
  • There's no firewall blocking the connection

The simplest starting point is probably to try to connect manually from the client machine using telnet or Putty. If that succeeds, then the problem is in your client code. If it doesn't, you need to work out why it hasn't. Wireshark may help you on this front.

Solution 3 - Java

You have to connect your client socket to the remote ServerSocket. Instead of

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

do

Socket clientSocket = new Socket(serverName, 5000);

The client must connect to serverName which should match the name or IP of the box on which your ServerSocket was instantiated (the name must be reachable from the client machine). BTW: It's not the name that is important, it's all about IP addresses...

Solution 4 - Java

I had the same problem, but running the Server before running the Client fixed it.

Solution 5 - Java

One point that I would like to add to the answers above is my experience-

"I hosted on my server on localhost and was trying to connect to it through an android emulator by specifying proper URL like http://localhost/my_api/login.php . And I was getting connection refused error"

Point to note - When I just went to browser on the PC and use the same URL (http://localhost/my_api/login.php) I was getting correct response

so the Problem in my case was the term localhost which I replaced with the IP for my server (as your server is hosted on your machine) which made it reachable from my emulator on the same PC.


To get IP for your local machine, you can use ipconfig command on cmd you will get IPv4 something like 192.68.xx.yy Voila ..that's your machine's IP where you have your server hosted. use it then instead of localhost

http://192.168.72.66/my_api/login.php


Note - you won't be able to reach this private IP from any node outside this computer. (In case you need ,you can use Ngnix for that)

Solution 6 - Java

I had the same problem with Mqtt broker called vernemq.but solved it by adding the following.

  1. $ sudo vmq-admin listener show

to show the list o allowed ips and ports for vernemq

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

to add any ip and your new port. now u should be able to connect without any problem.

Hope it solves your problem. enter image description here

Solution 7 - Java

Hope my experience may be useful to someone. I faced the problem with the same exception stack trace and I couldn't understand what the issue was. The Database server which I was trying to connect was running and the port was open and was accepting connections.

The issue was with internet connection. The internet connection that I was using was not allowed to connect to the corresponding server. When I changed the connection details, the issue got resolved.

Solution 8 - Java

i got this error because I closed ServerSocket inside a for loop that try to accept number of clients inside it (I did not finished accepting all clints)

so be careful where to close your Socket

Solution 9 - Java

In my case, I gave the socket the name of the server (in my case "raspberrypi"), and instead an IPv4 address made it, or to specify, IPv6 was broken (the name resolved to an IPv6)

Solution 10 - Java

In my case, I had to put a check mark near Expose daemon on tcp://localhost:2375 without TLS in docker setting (on the right side of the task bar, right click on docker, select setting)

Solution 11 - Java

I had same problem and the problem was that I was not closing socket object.After using socket.close(); problem solved. This code works for me.

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

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

Solution 12 - Java

I changed my DNS network and it fixed the problem

Solution 13 - Java

You probably didn't initialize the server or client is trying to connect to wrong ip/port.

Solution 14 - Java

Change local host to your ip address

 localhost
 //to you local ip
 192.168.xxxx

Solution 15 - Java

There is a service called MySQL80 that should be running to connect to the database

for windows you can access it by searching for services than look for MySQL80 service and make sure it is running

Solution 16 - Java

I saw the same error message ""java.net.ConnectException: Connection refused" in SQuirreLSQL when it was trying to connect to a postgresql database through an ssh tunnel.

Example of opening tunel: enter image description here

Example of error in Squirrel with Postgresql:

enter image description here

It was trying to connect to the wrong port. After entering the correct port, the process execution was successful.

See more options to fix this error at: https://stackoverflow.com/a/6876306/5857023

Solution 17 - Java

It could be that there is a previous instance of the client still running and listening on port 5000.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionSamantha CataniaView Question on Stackoverflow
Solution 1 - JavaCollin PriceView Answer on Stackoverflow
Solution 2 - JavaJon SkeetView Answer on Stackoverflow
Solution 3 - JavahomeView Answer on Stackoverflow
Solution 4 - JavaDao LamView Answer on Stackoverflow
Solution 5 - JavaeRaisedToXView Answer on Stackoverflow
Solution 6 - JavaMrOnyanchaView Answer on Stackoverflow
Solution 7 - JavaphoenixView Answer on Stackoverflow
Solution 8 - JavaBasheer AL-MOMANIView Answer on Stackoverflow
Solution 9 - JavaZhyanoView Answer on Stackoverflow
Solution 10 - Javauser1419243View Answer on Stackoverflow
Solution 11 - JavaSantosh KarnaView Answer on Stackoverflow
Solution 12 - JavaElham NikbakhtView Answer on Stackoverflow
Solution 13 - JavasycloneView Answer on Stackoverflow
Solution 14 - JavaGabriel RogathView Answer on Stackoverflow
Solution 15 - JavaMonirRouissiView Answer on Stackoverflow
Solution 16 - JavaGenivanView Answer on Stackoverflow
Solution 17 - JavaMichael MunseyView Answer on Stackoverflow