The SocketAddress
that this returns is actually a protocol-dependent subclass. For internet protocols, such as TCP in your case, you can cast it to an InetSocketAddress
:
InetSocketAddress sockaddr = (InetSocketAddress)socketName.getRemoteSocketAddress();
Then you can use the methods of InetSocketAddress
to get the information you need, e.g.:
InetAddress inaddr = sockaddr.getAddress();
Then, you can cast that to an Inet4Address
or Inet6Address
depending on the address type (if you don't know, use instanceof
to find out), e.g. if you know it is IPv4:
Inet4Address in4addr = (Inet4Address)inaddr;
byte[] ip4bytes = in4addr.getAddress(); // returns byte[4]
String ip4string = in4addr.toString();
Or, a more robust example:
SocketAddress socketAddress = socketName.getRemoteSocketAddress();
if (socketAddress instanceof InetSocketAddress) {
InetAddress inetAddress = ((InetSocketAddress)socketAddress).getAddress();
if (inetAddress instanceof Inet4Address)
System.out.println("IPv4: " + inetAddress);
else if (inetAddress instanceof Inet6Address)
System.out.println("IPv6: " + inetAddress);
else
System.err.println("Not an IP address.");
} else {
System.err.println("Not an internet protocol socket.");
}