在无连接服务器中获取远程IP地址

时间:2013-03-01 15:50:34

标签: java netty

目前我已经建立了一个无连接服务器,我想知道每个udp数据包的远程IP地址。

为此,我使用

addr = ((InetSocketAddress)ctx.getChannel().getRemoteAddress()).getAddress();

在我的频道处理程序中,例如

public void messageReceived(ChannelHandlerContext ctx, MessageEvent ev) throws Exception 

NullPointerException 出来了。在我的猜测中,由于无连接通道,通道在收到每个udp数据包后已经关闭。

在这种情况下我怎么知道?

感谢〜

2 个答案:

答案 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