Я установил базовый 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? Большое спасибо за вашу помощь.
Используя приведенный выше код, я только декодирование сообщения дейтаграмм. Как я могу декодировать заголовок датаграммы, поскольку я не вижу вариант из документации нетти? – Supernovaaa
Странное место для поиска. Это не в документации Netty. Он находится в документации 'java.net.DatagramPacket'. – EJP