Ловля исключений и передача исключений в Netty - PullRequest
0 голосов
/ 12 октября 2018

Я пытаюсь распознать любое исключение после получения или отправки клиентом сообщения на сервер или с сервера.И если произойдет какое-либо исключение, я хочу закрыть соединение и сказать, что «Соединение было закрыто из-за« этого »исключения» и т. Д.1007 *

ФУНКЦИЯ ЧТЕНИЯ

@Override
    public void channelRead0(ChannelHandlerContext channelHandlerContext, ByteBuf in) {
        InetSocketAddress socketAddress = (InetSocketAddress) channelHandlerContext.channel().remoteAddress();
        InetAddress inetaddress = socketAddress.getAddress();
        String ipAddress = inetaddress.getHostAddress(); // IP address of client

        TCPHandshakeMessage tcpMessage;
        byte[] signal;
        String input = in.toString(CharsetUtil.US_ASCII);

        /*
         * mode 0 -> Amaç sunucuların ayakta olup olmadığını anlamak
         * mode 1 -> Amaç sunuculara mesaj göndermek
         * */
        if(this.mode == 1){  //MODE 1 BAŞLANGICI
            //I WRITE THIS ON PURPOSE
            double x = 12 / 0;
            System.err.println("MESSAGE SENT TO " + message + " IP : " + ipAddress);
            this.host.setActive(true);
            //TODO TCP MESSAGE SINIFINI KULLAN
            signal = message.getBytes();
            sendMessage(channelHandlerContext, signal);
            /*try {

            }catch (Exception e){
                System.out.println("An Error Occured " + e);
            }finally {
                channelHandlerContext.channel().close();
            }*/
        }
}

Должен ли я использовать channelFuture.addListener () в области СОЕДИНЕНИЯ?

Спасибо.

1 Ответ

0 голосов
/ 12 октября 2018

Если это запрос HTTP 1.1, вы можете обработать исключение следующим образом:

@Override
    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {
        ctx.writeAndFlush(new DefaultFullHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.INTERNAL_SERVER_ERROR))
                .addListener(ChannelFutureListener.CLOSE);
        LOG.error("Error occured", cause);
    }

ChannelFutureListener.CLOSE слушатель закроет соединение после writeAndFlush успешно

...