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

Rak*_*kim 6 java sockets client

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

Jas*_*n C 6

SocketAddress,这将返回实际上是一个协议相关的子类.对于Internet协议,例如TCP,您可以将其强制转换为InetSocketAddress:

InetSocketAddress sockaddr = (InetSocketAddress)socketName.getRemoteSocketAddress();
Run Code Online (Sandbox Code Playgroud)

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

InetAddress inaddr = sockaddr.getAddress();
Run Code Online (Sandbox Code Playgroud)

然后,您可以将其转换为Inet4AddressInet6Address根据地址类型(如果您不知道,用于instanceof查找),例如,如果您知道它是IPv4:

Inet4Address in4addr = (Inet4Address)inaddr;
byte[] ip4bytes = in4addr.getAddress(); // returns byte[4]
String ip4string = in4addr.toString();
Run Code Online (Sandbox Code Playgroud)

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

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.");
}
Run Code Online (Sandbox Code Playgroud)