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

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

返回的SocketAddress实际上是一个依赖于协议的子类 。 对于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."); } 
 ((InetSocketAddress)socketName).getAddress().toString() 

将返回如下内容: /10.255.34.132包含主机名,如果您不想要主机名,可以尝试这样做:

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