Akka/Spray框架如何获取客户端的IPv6地址?

How do I obtain the client's IPv6 address in the Akka/Spray framework?

我目前正在使用以下代码获取 IPv4 地址:

import spray.http.RemoteAddress
...
val ipV4: String = remoteAddress.toOption.map(_.getHostAddress).getOrElse("<unknown>")

但是,我似乎找不到任何有关对 IPv6 执行相同操作的信息。如有任何帮助,我们将不胜感激。

这不取决于您的方法 - 它取决于您的网络配置。

Look at the source codespray.http.RemoteAddress

def apply(bytes: Array[Byte]): RemoteAddress = {
    require(bytes.length == 4 || bytes.length == 16)
    try IP(InetAddress.getByAddress(bytes)) catch { case _: UnknownHostException ⇒ Unknown }
}

此代码包装了 IPv4(4 字节)和 IPv6(16 字节)。因此,您将收到 IPv4 地址、IPv6 地址或特殊的 Pv4 映射到 IPv6 地址,具体取决于您的网络设置。

尝试在网络接口配置为使用 IPv6 的本地电脑上 运行 您的代码,您将会看到。

这是您实际从 Java 收到的对象:http://docs.oracle.com/javase/8/docs/api/java/net/InetAddress.html