2013-03-01 2 views
2

현재 연결없는 서버를 만들었으며 각 UDP 패킷의 원격 IP 주소를 알고 싶습니다. 비 연결성 서버에서 원격 IP 주소 얻기

같은

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

그러나 NullPointerException이 나오는, 내 채널 처리기에서

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

를 사용 이렇게하려면. 내 생각에, 채널은 비 연결형 채널로 인해 각각의 UDP 패킷을받은 후에 닫혔습니다.

이 경우 어떻게 알 수 있습니까? 그것은 ChannelHandlerContext 클래스를 사용하면 참조하는 것이 무엇인지 (적어도 나에게) 명확하지 않다 ~

답변

0

감사합니다.

DatagramSocket [1]을 사용하는 경우 receive [1] 메서드를 사용하여 UDP 패킷을 읽을 수 있습니다. receive 메쏘드 [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

+0

NIO DatagramChannel이이 정보를 제공하지 않는 것으로 보입니다. http://docs.oracle.com/javase/6/docs/api/java/nio/channels/DatagramChannel.html –

+1

그는 NIO가 아니라 Netty에 대해 실제로 묻습니다. – trustin

4

내가 채널이 원격 주소를 제공하지 것입니다 같은 일을 발견하지만, 당신이 그것에 대해 생각하면, 원격 주소를 알고있는 채널 (또는 래핑하는 DatagramSocket)이 아니라 데이터 그램 자체가 페이로드입니다. 페이로드는 네트워크 MessageEvent으로 전달되며 MessageEvent.getRemoteAddress()으로 전화하면 원하는 것을 반환합니다.