【发布时间】:2021-03-26 02:55:13
【问题描述】:
我有以下绑定来处理 UDP 数据包
private void doStartServer() {
final UDPPacketHandler udpPacketHandler = new UDPPacketHandler(messageDecodeHandler);
workerGroup = new NioEventLoopGroup(threadPoolSize);
try {
final Bootstrap bootstrap = new Bootstrap();
bootstrap
.group(workerGroup)
.handler(new LoggingHandler(nettyLevel))
.channel(NioDatagramChannel.class)
.option(ChannelOption.SO_BROADCAST, true)
.handler(udpPacketHandler);
bootstrap
.bind(serverIp, serverPort)
.sync()
.channel()
.closeFuture()
.await();
} finally {
stop();
}
}
和处理程序
@ChannelHandler.Sharable << note this
@Slf4j
@AllArgsConstructor
public class UDPPacketHandler extends SimpleChannelInboundHandler<DatagramPacket> {
private final MessageP54Handler messageP54Handler;
@Override
public void channelReadComplete(final ChannelHandlerContext ctx) {
ctx.flush();
}
@Override
public void exceptionCaught(final ChannelHandlerContext ctx, final Throwable cause) {
log.error("Exception in UDP handler", cause);
ctx.close();
}
}
在某些时候,我得到了这个异常java.net.SocketException: Network dropped connection on reset: no further information,它在exceptionCaught 中处理。这会触发ChannelHandlerContext 关闭。在这一点上,我的整个服务器都停止了(在第一个 sn-p 的 finnaly 块上执行)
如何正确处理异常,以便即使在发生此类异常后也可以处理新连接?
【问题讨论】:
标签: java udp netty socketexception