2016-12-28 2 views
0

Я установил базовый UDP-сервер, используя netty 4.1, который отлично работает при чтении данных из пакетов. Я хотел бы добавить функцию для сервера, чтобы ответить клиенту после получения пакета UDP. Каков наилучший способ сделать это. Я знаю, что UDP - это метод связи без подключения, но вы должны иметь возможность получить IP-адрес и ответить клиенту?Получение исходного IP-адреса пакета датаграммы UDP Netty 4.1

Мой код выглядит следующим образом;

public final class Server { 

private static final int PORT = Integer.parseInt(System.getProperty("port", "6565")); 

public static void runCommand() throws Exception { 
    System.out.print("Server is started on port = "+PORT+"\n"); 
    EventLoopGroup group = new NioEventLoopGroup(); 
    try { 
     Bootstrap b = new Bootstrap(); 
     b.group(group) 
       .channel(NioDatagramChannel.class) 
       .handler(new ServerHandler()); 

     b.bind(PORT).sync().channel().closeFuture().await(); 
    } finally { 
     group.shutdownGracefully(); 
    } 
} 

}

public class ServerHandler extends SimpleChannelInboundHandler<DatagramPacket> { 

@Override 
public void channelRead0 (ChannelHandlerContext ctx, DatagramPacket packet) throws Exception { 
    System.err.println ("Messaged received on " + new Date() + ":\r"); 
    System.err.println(packet.content().toString(CharsetUtil.UTF_8) + "\r\n"); 
} 

@Override 
public void channelReadComplete(ChannelHandlerContext ctx) { 
    ctx.flush(); 
} 


@Override 
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) { 
    cause.printStackTrace(); 
    ctx.close(); 
} 

}

Может кто-то пожалуйста мне точку в правильном направлении в том, как получить адрес источника IP? Большое спасибо за вашу помощь.

ответ

1

Исходный IP-адрес находится в DatagramPacket.

+0

Используя приведенный выше код, я только декодирование сообщения дейтаграмм. Как я могу декодировать заголовок датаграммы, поскольку я не вижу вариант из документации нетти? – Supernovaaa

+0

Странное место для поиска. Это не в документации Netty. Он находится в документации 'java.net.DatagramPacket'. – EJP