目前我已经建立了一个无连接服务器,我想知道每个udp数据包的远程IP地址。
为此,我使用
addr = ((InetSocketAddress)ctx.getChannel().getRemoteAddress()).getAddress();
在我的频道处理程序中,例如
public void messageReceived(ChannelHandlerContext ctx, MessageEvent ev) throws Exception
但 NullPointerException 出来了。在我的猜测中,由于无连接通道,通道在收到每个udp数据包后已经关闭。
在这种情况下我怎么知道?
感谢〜
答案 0 :(得分:4)
我注意到同样的事情,即通道不会提供远程地址,但是当你想到它时,它不是通道(或它包装的DatagramSocket)甚至知道远程地址,而是数据报本身就是有效载荷。有效负载以netty MessageEvent传送,如果您致电MessageEvent.getRemoteAddress(),则会返回您想要的内容。
答案 1 :(得分:0)
目前尚不清楚(至少对我来说)你引用的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