客户端套接字 - 获取IP - java

时间:2014-03-27 14:38:55

标签: java sockets client

我正在使用套接字实现TCP连接,我需要在服务器端获取客户端套接字的IP。我使用了socketName.getRemoteSocketAddress()确实返回了IP地址,后跟我正在使用的端口ID!我怎样才能获得地址而不是端口?

2 个答案:

答案 0 :(得分:6)

此返回的SocketAddress实际上是protocol-dependent subclass。对于Internet协议,例如TCP,您可以将其转换为InetSocketAddress

InetSocketAddress sockaddr = (InetSocketAddress)socketName.getRemoteSocketAddress();

然后,您可以使用InetSocketAddress的方法获取所需的信息,例如:

InetAddress inaddr = sockaddr.getAddress();

然后,您可以将其转换为Inet4AddressInet6Address,具体取决于地址类型(如果您不知道,请使用instanceof查找),例如如果你知道它是IPv4:

Inet4Address in4addr = (Inet4Address)inaddr;
byte[] ip4bytes = in4addr.getAddress(); // returns byte[4]
String ip4string = in4addr.toString();

或者,一个更强大的例子:

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.");
}

答案 1 :(得分:2)

((InetSocketAddress)socketName).getAddress().toString()

将返回包含主机名的/10.255.34.132内容,如果您不想要主机名,可以尝试此操作:

((InetSocketAddress)socketName).getAddress().toString().split("/")[1]