How can I bind serversocket to specific IP?

inetaddress, ip, java, serversocket, tcp

Solution

You can use the factory method `INetAddress.getByName`. It'll figure out which subclass to use. For example:

InetAddress addr = InetAddress.getByName("127.0.0.1");
// or
InetAddress addr = InetAddress.getByName("::1");

// and now you can pass it to your socket-constructor
ServerSocket sock = new ServerSocket(1234, 50, addr);

Problem

If I have a `String` representing an IP address (IPv4 or IPv6) how can I create a `ServerSocket` and bind to this IP without caring if the IP passed in, is IPv4 or IPv6? I see that there is a constructor:`ServerSocket(int port, int backlog, InetAddress bindAddr)` but `InetAddress` does not seem to offer any constructors and its subclasses have names specific to IPv4 and IPv6. So how can I bind the socket to the IP?

Original source