在无连接服务器上获取远程IP地址
问题描述:
目前我已经建立了无连接服务器,我想知道每个udp数据包的远程IP地址。在无连接服务器上获取远程IP地址
要做到这一点,我在通道处理器使用
addr = ((InetSocketAddress)ctx.getChannel().getRemoteAddress()).getAddress();
如
public void messageReceived(ChannelHandlerContext ctx, MessageEvent ev) throws Exception
但NullPointerException异常出来。在我的猜测中,由于无连接信道,通道在收到每个udp数据包后已关闭。
在这种情况下,我怎么知道它?
谢谢〜
答
目前尚不清楚(至少对我来说)的ChannelHandlerContext类是什么,你所引用。
如果使用DatagramSocket [1],则可以使用receive [1]方法读取UDP数据包。如接收方法[2]中所述,DatagramPacket [3]将具有发送者的IP地址和端口号。
[1] - http://docs.oracle.com/javase/6/docs/api/java/net/DatagramSocket.html [2] - http://docs.oracle.com/javase/6/docs/api/java/net/DatagramSocket.html#receive(java.net.DatagramPacket) [3] - http://docs.oracle.com/javase/6/docs/api/java/net/DatagramPacket.html
答
我发现同样的事情,这是该频道将不提供远程地址,但是当你想想看,它不是包含远程地址的通道(或DatagramSocket),而是数据报本身,它是有效载荷。有效载荷以netty MessageEvent提供,如果您致电MessageEvent.getRemoteAddress(),它将返回您想要的。
似乎并没有NIO DatagramChannel提供此信息。 http://docs.oracle.com/javase/6/docs/api/java/nio/channels/DatagramChannel.html – 2013-03-01 16:24:57
他实际上是在问Netty,而不是NIO。 – trustin 2013-03-02 12:10:45