An exceptionCaught() event was fired, and it reached at the tail of the pipeline. It usually means the last handler in the pipeline did not handle the exception

问题:SocketIO 连接  网页链接正常 在手机上运行报下面错误

```

elAdmin- 2020-10-24 20:31:17 [nioEventLoopGroup-6-8] WARN i.n.channel.DefaultChannelPipeline - An exceptionCaught() event was fired, and it reached at the tail of the pipeline. It usually means the last handler in the pipeline did not handle the exception.

java.lang.NumberFormatException: For input string: "true"

at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:68)

at java.base/java.lang.Integer.parseInt(Integer.java:652)

at java.base/java.lang.Integer.valueOf(Integer.java:983)

at com.corundumstudio.socketio.transport.PollingTransport.channelRead(PollingTransport.java:90)

at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)

at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)

at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340)

at com.corundumstudio.socketio.handler.AuthorizeHandler.channelRead(AuthorizeHandler.java:115)

at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)

at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)

at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340)

at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:108)

at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)

at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)

at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340)

at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:102)

at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)

at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)

at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340)

at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:310)

at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:284)

at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)

at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)

at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340)

at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1434)

at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)

at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)

at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:965)

at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:163)

at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:628)

at io.netty.channel.nio.NioEventLoop.processSelectedKeysPlain(NioEventLoop.java:528)

at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:482)

at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:442)

at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:884)

at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)

at java.base/java.lang.Thread.run(Thread.java:832)


```


尝试过


```

@Override

  public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {

    ctx.close();

  }

```



```

@Override

  protected void channelRead0(ChannelHandlerContext channelHandlerContext, HttpObject httpObject) throws Exception {

    try {

      if(httpObject instanceof HttpRequest){

        ByteBuf content = Unpooled.copiedBuffer("sb", CharsetUtil.UTF_8);

        FullHttpResponse response = new DefaultFullHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.OK,content);

        response.headers().set(HttpHeaderNames.CONTENT_TYPE,"text/plain");

        response.headers().set(HttpHeaderNames.CONTENT_LENGTH,content.readableBytes());

        channelHandlerContext.writeAndFlush(response);

      }

    }catch (Exception e){

      e.printStackTrace();

    }

  }

```



网页运行正常 手机报错

看提示的意思是:远程主机强迫关闭了一个现有的连接。

java.lang.NumberFormatException: For input string: "true"

at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:68)

at java.base/java.lang.Integer.parseInt(Integer.java:652)

at java.base/java.lang.Integer.valueOf(Integer.java:983)

这块的提示,说明你程序中用到了类型转换,字符串类型转Integer类型的时候,存在非数字字符。

通过测试 发现电脑也会出现这个错误 但是电脑循环几遍以后电脑就忽略这个问题

手机在测试的时候 循环一次 就断开连接

网上找的解决方法 都尝试过 问题还是没解决

你应该程序代码有问题。找一下,有没有类型转换的地方。

清理服务器环境、编译工具、关闭重启编译工具,试过没

可能客户端主动关闭连接了,避免错误

Channel channel = ctx.channel();

if(channel.isActive()){

ctx.close();

}


其次检查下,是否存在数据类型转换错误,确确实实是类型转换错误

重启后 又出现了另一个错误 发送的地址 /socket.io/1/ 和网页/socket.io/发送的不一样 应该是nodejs的和java的有出入 前端去socket.io.cpp里面删除了后面拼接的1/发送能链接了

另个错误也是这个错误 只是 显示的不是类型转换错误 二手 空指针