请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

7-11节 Netty服务器报错,客户端连接后Netty服务器报错 请问下怎么解决啊

图片描述
客户端代码:


package cn.alex;

import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.Socket;

public class test {

    public static void main(String[] args) {

        for (int i = 0; i < 10; i++) {


                try {
                    Socket socket = new Socket();
                    socket.connect(new InetSocketAddress(9092));
                } catch (Exception e) {
                    throw new RuntimeException(e);
                }
                System.out.println("connected");

        }

    }

}

服务端代码

package cn.alex;

import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.Channel;
import io.netty.channel.ChannelFuture;
import io.netty.channel.ChannelInitializer;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.nio.NioServerSocketChannel;

public class NettyIMServerApplication {

    public void startServer() throws InterruptedException {
        // 处理 accept事件
        NioEventLoopGroup bossGroup = new NioEventLoopGroup();
        // 处理读写事件
        NioEventLoopGroup workerGroup = new NioEventLoopGroup();
        ServerBootstrap bootstrap = new ServerBootstrap();

        bootstrap.group(bossGroup, workerGroup);
        bootstrap.channel(NioServerSocketChannel.class);
        bootstrap.childHandler(new ChannelInitializer<>() {
            @Override
            protected void initChannel(Channel channel) throws Exception {
                System.out.println("init " + channel.id());
            }
        });

        Runtime.getRuntime().addShutdownHook(new Thread(()->{
            bossGroup.shutdownGracefully();
            workerGroup.shutdownGracefully();
        }));
        ChannelFuture channelFuture = bootstrap.bind(9092).sync();
        System.out.println("服务启动成功,监听端口为 9092");
        // 这里会阻塞掉主线程,实现服务长期开启
        channelFuture.channel().closeFuture().sync();
    }


    public static void main(String[] args) throws InterruptedException {
        NettyIMServerApplication application = new NettyIMServerApplication();
        application.startServer();
    }

}

谢谢老师

正在回答

2回答

我拷贝了一份你的代码,发现运行是正常的。但是从你的日志来看,像是一开始连接正常,但是后续出现了网络波动,导致连接断开了,要不从本地环境开始排查看看?

0 回复 有任何疑惑可以回复我~
  • 提问者 HERTION #1
    好的,谢谢老师
    回复 有任何疑惑可以回复我~ 2023-11-06 00:53:59
慕田峪604633 2024-02-24 20:00:36

我也遇到这个问题,我这边是把客户端的睡眠等待时间调整到和老师一样,就正常了。老师能解答下原理 吗

0 回复 有任何疑惑可以回复我~
  • 是不是你的服务端还没部署好 客户端就直接连接了
    回复 有任何疑惑可以回复我~ 2024-02-25 14:03:22
  • 不是,先起的服务端,然后起客户端的。一开始设置的等待时间是1秒,客户端发送完消息后就报这个错了。等待时间调大就正常了
    回复 有任何疑惑可以回复我~ 2024-02-25 15:15:37
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信