我正在编写一个Java Websocket客户端,该客户端需要知道其自己的IP地址,即用于连接到服务器端点的接口的IP地址。

由于客户端可能会更改地址,因此每当它们(重新)连接到服务器时,都必须更新本地地址。使用Jetty的客户端可以轻松实现此目的,因为其Session类具有getLocalAddress()方法。

另一方面,Tyrus的session class缺少此功能。一个简单的解决方法是使用普通的旧套接字。每当调用客户端的onOpen时,我只要打开服务器的常规TCP套接字,获取套接字的本地地址,然后将其关闭即可。但这很浪费而且容易出错,所以我宁愿深入研究Tyrus并从其套接字获取本地地址。有办法吗?

最佳答案

Tyrus是JSR356(javax.websocket)的实现,因此,此信息级别不可用。

Jetty比JSR356和Tyrus早了大约3年,并且已经从WebSocket中学到了很多人们需要的东西。

您必须等到javax.websocket的2.0版,并祈祷它可以添加此级别的信息,然后您才希望使用它。


  注意:javax.websocket 2.0目前没有任何计划或工作正在进行,JSR的专家组已经有超过一年的历史了。


您极不可能从Tyrus获得此信息,因为它依赖于使用javax.servlet.http.HttpServletRequest.upgrade()javax.servlet.http.HttpUpgradeHandler,该javax.servlet.http.WebConnection由容器传递给Tyrus implementation。这两个对象都没有公开连接信息。

javax.servlet.http.HttpUpgradeHandler的甚至没有单独跟踪此信息以包含在JSR356层中。

09-19 11:34