我正在编写一个 Java websocket 客户端,它需要知道自己的 IP 地址,这意味着用于连接到服务器端点的接口(interface)的 IP 地址。
由于客户端可能会更改地址,因此每当它们(重新)连接到服务器时,都必须更新本地地址。使用 Jetty 的客户端可以轻松实现这一点,因为它的 Session类有一个 getLocalAddress()方法。
泰鲁斯的session class另一方面缺乏这种能力。一个简单的解决方法是使用普通的旧套接字。每当调用客户端的 onOpen
时,我只需打开一个到服务器的常规 TCP 套接字,获取套接字的本地地址,然后将其关闭。但这既浪费又容易出错,所以我宁愿深入研究 Tyrus 并从其套接字获取本地地址。有办法做到这一点吗?
最佳答案
Tyrus 是 JSR356 (javax.websocket
) 的实现,因此,此级别的信息不可用。
Jetty 比 JSR356 和 Tyrus 早大约 3 年,并且从 WebSocket 中了解了人们的需求。
您必须等到 javax.websocket
版本 2.0 并祈祷它添加了此级别的信息,然后您才能希望使用它。
Note: there's currently no plans or efforts underway for
javax.websocket
2.0, the expert-group at the JSR has been inactive for over a year now.
您不太可能从 Tyrus 获得此信息,因为它依赖于 javax.servlet.http.HttpServletRequest.upgrade()
它使用 javax.servlet.http.HttpUpgradeHandler
,它被赋予 javax.servlet.http.WebConnection
通过容器。这两个对象都没有公开连接信息。
Tyrus implementation的javax.servlet.http.HttpUpgradeHandler
甚至没有单独跟踪此信息以将其包含在 JSR356 层中。
关于java - 如何从 Tyrus websocket 客户端获取本地 IP 地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34618820/