Search code examples
javasocketsjvmbind

Cannot assign requested address using ServerSocket.socketBind


When I'm trying to set up a socket server, I've got an error message:

Exception in thread "main" java.net.BindException: Cannot assign requested address: JVM_Bind
    at java.net.PlainSocketImpl.socketBind(Native Method)
    at java.net.PlainSocketImpl.bind(PlainSocketImpl.java:383)
    at java.net.ServerSocket.bind(ServerSocket.java:328)
    at java.net.ServerSocket.<init>(ServerSocket.java:194)
    at java.net.ServerSocket.<init>(ServerSocket.java:106)
    at socketyserver.SocketyServer.main(SocketyServer.java:12)
Java Result: 1

Whole code is simplest as it can be:

public static void main(String[] args) throws UnknownHostException, IOException
{
    ServerSocket serverSocket;
    serverSocket = new ServerSocket(9999);
}

I'm 100% sure that my ports are forwarded, Windows Firewall is off. Nothing blocks port 9999. What else can go wrong?


Solution

  • As other people have pointed out, it is most likely related to another process using port 9999. On Windows, run the command:

    netstat -a -n | grep "LIST"
    

    And it should list anything there that's hogging the port. Of course you'll then have to go and manually kill those programs in Task Manager. If this still doesn't work, replace the line:

    serverSocket = new ServerSocket(9999);
    

    With:

    InetAddress locIP = InetAddress.getByName("192.168.1.20");
    serverSocket = new ServerSocket(9999, 0, locIP);
    

    Of course replace 192.168.1.20 with your actual IP address, or use 127.0.0.1.