当前位置: 首页 > 知识库问答 >
问题:

java - 对等连接异常?

向泽语
2023-08-25

我这个程序采用的是netty,此程序中有客户端和服务端。

程序思路:服务端接受消息后在利用客户端发给别的服务端。

出现问题:时不时会出现这个异常,也不知道是那报的异常,经过查资料此异常是由某一端断开,发生的连接异常 ,我的客户端做了断开重连 但是并没发现重连的log ,难道是上游的客户端断开,那我的服务端也不应该报异常啊。不是很清楚? 有知道的吗?或者提供解决思路。

CB1)7A`983D(C)XIV7M5Q[Q.png

客户端重连代码

@Componentpublic class BdspNettySocketClient {    private Logger log = LoggerFactory.getLogger(BdspNettySocketClient.class);    /**     * 线程组     */    private NioEventLoopGroup eventExecutors;    /**     * 存放通道  BdspNettySocketClientInitializer中的通道为最新通道     */    public static final ConcurrentHashMap<String, Channel> mChannel = new ConcurrentHashMap<>();    /**     * 启动netty客户端     */    @PostConstruct    public void start() {        //初始化信息        try {            this.init();        } catch (Exception e) {            log.error("启动 netty 客户端出现异常", e);        }    }    /**     * 当Bean在容器销毁之前,调用被@PreDestroy注解的方法     */    @PreDestroy    public void destroy() {        this.eventExecutors.shutdownGracefully();    }    /**     * 初始化nettyClient配置     */    private void init() {        //每次都需要重置通道        if (mChannel.get("channel") != null) {            mChannel.clear();        }        this.eventExecutors = new NioEventLoopGroup(1);        //配置客户端的各种信息        Bootstrap bootstrap = new Bootstrap();        //设置线程组        bootstrap.group(eventExecutors);        //设置通道 此通道是异步非堵塞        bootstrap.channel(NioSocketChannel.class);        bootstrap.option(ChannelOption.SO_KEEPALIVE, true);        //初始化通道 其中在里面配置逻辑        bootstrap.handler(new BdspNettySocketClientInitializer());        //连接设备信息        log.info("netty client start!");         /**         * 连接好的容器         */        ChannelFuture channelFuture = bootstrap.connect("", );        //这事防止客户端掉线 掉线后重连        channelFuture.addListener(new ConnectionListener());    }    public void send(String msg) {        try {            mChannel.get("channel").writeAndFlush(Unpooled.copiedBuffer(msg, CharsetUtil.UTF_8));       /*     System.out.println(mChannel.get("channel"));            System.out.println(mChannel.get("channel"));            channelFuture.channel().writeAndFlush(Unpooled.copiedBuffer(msg, CharsetUtil.UTF_8));*/        } catch (Exception e) {            log.error(this.getClass().getName().concat(".send has error"), e);        }    }    public void send(Object msg) {        try {            mChannel.get("channel").writeAndFlush(msg);        } catch (Exception e) {            log.error(this.getClass().getName().concat(".send has error"), e);        }    }}

断开后进入重连

@Componentpublic class ConnectionListener implements ChannelFutureListener {    private BdspNettySocketClient bdspNettySocketClient = new BdspNettySocketClient();    /**     * 处理第一次连接服务器是否成功的     * @param channelFuture  the source {@link Future} which called this callback     * @throws Exception     */    @Override    public void operationComplete(ChannelFuture channelFuture) throws Exception {        if (!channelFuture.isSuccess()) {            final EventLoop loop = channelFuture.channel().eventLoop();            loop.schedule(new Runnable() {                @Override                public void run() {                    System.err.println("服务端链接不上,开始重连操作...");                    bdspNettySocketClient.start( );                }            }, 2L, TimeUnit.SECONDS);        } else {            System.err.println("服务端链接成功...");        }    }}

共有1个答案

申屠晟
2023-08-25

这个应该是你的客户端断开连接了,客户端怎么做的断开重连,贴下代码看看

 类似资料:
  • 问题内容: 我正在开发一个从Web服务器下载数据的应用程序,一开始似乎没有任何问题,但是几天前我开始收到这种异常:javax.net.ssl.SSLException: Read error: ssl=0x7a6588: I/O error during system call, Connection reset by peer我不确定是什么原因引起的问题以及如何解决。这是整个LogCat消息:

  • 我正在编写Android应用程序,从一个网站下载特定的文件(目前为20M字节),以供测试之用。我使用URLConnection和BufferedInputStream。 下载了几兆字节后,我收到对等体重置的IOException连接。 InputStream.Read()暂停了大约130秒,然后引发异常。 经过几次尝试,我注意到下载的字节是11,272,192或11,010,048,知道文件可以从

  • 问题内容: 建立: selenium :3.141.0 的Python :3.6.7 heroku-stack :heroku-18 headless-chrome :安装了v71.0.3578.80 buildpack chromedriver :已安装v2.44.609551 buildpack 在heroku中使用selenium时出现此错误: 我用谷歌搜索,但是没有运气。错误发生在此代码的

  • 问题内容: 大家好,我的课程在上面 我是jdbc的新手 请帮助我,我遇到运行时错误, java.lang.ClassNotFoundException:com.mysql.jdbc.Driver 感谢您的任何建议 注意:我不知道如何将jar文件放入我的类路径并动态绑定它:S 问题答案: 您需要下载MySQL Connector / J 并将.jar文件添加到您的应用程序中 将jar文件添加到中(如

  • 我们正在开发web应用程序,我们的tomcat服务器和mysql服务器运行在两个不同的服务器上,我们收到了错误 需要帮助来解决问题 已经尝试了这些链接的解决方案。 Hibernate会话无法打开事务 第一次登录:HTTP状态500 -请求处理失败;嵌套异常是org . spring framework . transaction . cannotcreatetransactionexception

  • 我正在尝试让一个简单的主机/客户端传输工作。我遵循了一个教程,服务器正常运行,但当客户端尝试连接时,它返回“由对等端重置连接”我真的不知道错误在哪里。