我有一个基于UDP Netty的服务器.它有一个SimpleChannelUpstreamHandler流水线,我覆盖了该messageReceived方法.
我需要不时地回复一些信息.我只能通过使用来自的套接字信息MessageEvent.getRemoteAddress()和来自的通道来实现MessageEvent.getChannel().为了能够重用这些信息,我将其保存在静态地图中.
这变成了 MessageEvent.getChannel().write("foo", MessageEvent.getRemoteAddress());
我所期望的是有MessageEvent.getChannel().getRemoteAddress()工作,但事实并非如此.它总是给我null.
小智 5
当使用UDP(数据报)通道作为服务器通道时,只将其绑定在本地地址上,并且不进行任何连接.这就是为什么没有与频道相关的远程地址,而且你总是null在通话时得到MessageEvent.getChannel().getRemoteAddress().这种行为是预期和正确的.相同的单个UDP"服务器"通道处理所有传入的客户端请求.
当使用UDP通道作为客户端通道时,可以通过将通道连接到远程地址来创建"连接".在这种情况下,通道将具有已配置的远程地址(尽管未建立实际连接),并且调用MessageEvent.getChannel().getRemoteAddress()将返回已配置的远程地址.连接UDP通道可防止用户使用该通道将数据发送到远程通道上配置的地址以外的地址.试图这样做会引发异常.在UDP中连接客户端通道是可选的,客户端可以使用仅在本地地址绑定的通道正常运行,只要它保存远程地址即可.
我想你有两个选择:
我相信第一种选择更好.
| 归档时间: |
|
| 查看次数: |
11659 次 |
| 最近记录: |