我正在尝试以字符串形式获取套接字连接的IP。
我正在使用一个框架,它返回收到的消息的SocketAddress
。如何将其转换为InetSocketAddress
或InetAddress
?
答案 0 :(得分:7)
如果您确定该对象是InetSocketAddress
,那么只需将其投射:
SocketAddress sockAddr = ...
InetSocketAddress inetAddr = (InetSocketAddress)sockAddr;
然后,您可以调用getAddress()
上的inetAddr
方法获取与其关联的InetAddress
对象。
答案 1 :(得分:4)
你可以尝试投射它。在这种情况下,这是downcasting。
InetSocketAddress isa = (InetSocketAddress) socketAddress;
但是,如果课程不是您所期望的,那么这可能会抛出ClassCastException
。
可以通过instanceof
运营商对此进行检查:
if (socketAddress instanceof InetSocketAddress) {
InetSocketAddress isa = (InetSocketAddress) socketAddress;
// invoke methods on "isa". This is now safe - no risk of exceptions
}
可以对SocketAddress
的其他子类进行相同的检查。
答案 2 :(得分:1)
实际上SocketAddress
是一个抽象类,所以你会收到它的一些子类。您是否尝试将退回的SocketAddress
投放到InetSocketAddress
?