关于Socket编程抛出:java.net.BindException: Address already in use: connect异常原因及处理

探讨newSocket()操作频繁导致端口耗尽的原因及解决策略,包括合理利用端口资源和调整newSocket()调用频率。

原因:

短时间内执行的new Socket( ) 操作过于频繁,导致端口被耗尽。

简单理解为:

每一次执行new Socket( )操作时都会为该套接字随机分配一个本机的端口号,而本机的端口号数量是有限制的,如果频繁地分配而来不及释放就会耗尽端口资源,等到下一次再执行newSocket( ) 操作时,将再无可用端口可以分配,故抛出异常。

有小伙伴可能就会问了:那我每次执行new Socket( ) 操作完之后及时使用close( ),不就可以解决了?
理论上这样子可以解决问题,但是我们必须明白close( )操作并不能立即释放绑定的端口, 而是把端口设置为TIME_WAIT状态过段时间(默认240s)才释放,如果在这段时间内还在不断地执行new socket( )操作仍然是会出现问题的。

解决方法
1.在进行下一个new socket( )操作之前,等待240s(默认执行close( ) 240s之后才释放)确保端口被真正释放
2.利用有限的接口资源干完要做的事。例如:假设现在有1000000条消息需要发送,按照旧方法需要循环1000000次new socket( ) 操作,一次发一条消息。新方法就是循环10000次new socket( ) 操作,一次发100条消息。

@Test @Timeout(value = 10, unit = TimeUnit.SECONDS) void testResponseTimeout() throws InterruptedException { // 定义一个不响应的服务器(覆盖createChannelInitializer) TcpServer nonResponsiveServer = new TcpServer() { @Override protected ChannelInitializer<SocketChannel> createChannelInitializer() { return new ChannelInitializer<SocketChannel>() { @Override protected void initChannel(SocketChannel ch) { // 仅保留解码器,移除业务处理器和编码器(不返回响应) ch.pipeline().addLast( new LengthFieldFrameDecoder(), new JsonRequestDecoder() ); } }; } }; // 启动服务器线程(处理InterruptedException) Thread nonResponsiveServerThread = new Thread(() -> { try { nonResponsiveServer.start(); } catch (InterruptedException e) { Thread.currentThread().interrupt(); // 恢复中断状态 LOG.error("服务器启动被中断", e); } }); nonResponsiveServerThread.start(); // 等待服务器启动(根据实际情况调整等待时间) Thread.sleep(3000); // 客户端连接并发送请求(验证超时) TcpClient client = new TcpClient("127.0.0.1", 8080); client.connect(); GreetRequest request = new GreetRequest(); request.setName("TimeoutUser"); GreetResponse response = client.sendRequest(request); assertThat(response).isNull(); // 预期超时返回null // 清理资源 client.shutdown(); nonResponsiveServer.shutdown(); nonResponsiveServerThread.join(3000); } @Test @Timeout(value = 10, unit = TimeUnit.SECONDS) // 防止测试卡住 void testNormalCommunication() throws InterruptedException { // 初始化客户端 TcpClient client = new TcpClient("127.0.0.1", TEST_PORT); client.connect(); // 构造请求 GreetRequest request = new GreetRequest(); request.setName("TestUser"); // 发送请求并等待响应 GreetResponse response = client.sendRequest(request); // 验证响应 assertThat(response).isNotNull(); assertThat(response.getMessage()).isEqualTo("Hello, TestUser!"); // 关闭客户端 client.shutdown(); }报错Exception in thread "Thread-3" java.net.BindException: Address already in use: bind at sun.nio.ch.Net.bind0(Native Method) at sun.nio.ch.Net.bind(Net.java:461) at sun.nio.ch.Net.bind(Net.java:453) at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:222) at io.netty.channel.socket.nio.NioServerSocketChannel.doBind(NioServerSocketChannel.java:148) at io.netty.channel.AbstractChannel$AbstractUnsafe.bind(AbstractChannel.java:434) at io.netty.channel.DefaultChannelPipeline$HeadContext.bind(DefaultChannelPipeline.java:1353) at io.netty.channel.AbstractChannelHandlerContext.invokeBind(AbstractChannelHandlerContext.java:492) at io.netty.channel.AbstractChannelHandlerContext.bind(AbstractChannelHandlerContext.java:471) at io.netty.channel.DefaultChannelPipeline.bind(DefaultChannelPipeline.java:994) at io.netty.channel.Channel.bind(Channel.java:302) at io.netty.bootstrap.AbstractBootstrap$2.run(AbstractBootstrap.java:380) at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:148) at io.netty.util.concurrent.AbstractEventExecutor.safeExecute$$$capture(AbstractEventExecutor.java:141) at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java) at --- Async.Stack.Trace --- (captured by IntelliJ IDEA debugger) at io.netty.util.concurrent.SingleThreadEventExecutor.addTask(SingleThreadEventExecutor.java) at io.netty.util.concurrent.SingleThreadEventExecutor.execute(SingleThreadEventExecutor.java:907) at io.netty.util.concurrent.SingleThreadEventExecutor.execute0(SingleThreadEventExecutor.java:873) at io.netty.util.concurrent.SingleThreadEventExecutor.execute(SingleThreadEventExecutor.java:863) at io.netty.bootstrap.AbstractBootstrap.doBind0(AbstractBootstrap.java:376) at io.netty.bootstrap.AbstractBootstrap.access$000(AbstractBootstrap.java:54) at io.netty.bootstrap.AbstractBootstrap$1.operationComplete(AbstractBootstrap.java:315) at io.netty.bootstrap.AbstractBootstrap$1.operationComplete(AbstractBootstrap.java:302) at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:603) at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:570) at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:505) at io.netty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:649) at io.netty.util.concurrent.DefaultPromise.setSuccess0(DefaultPromise.java:638) at io.netty.util.concurrent.DefaultPromise.trySuccess(DefaultPromise.java:118) at io.netty.channel.DefaultChannelPromise.trySuccess(DefaultChannelPromise.java:84) at io.netty.channel.AbstractChannel$AbstractUnsafe.safeSetSuccess(AbstractChannel.java:861) at io.netty.channel.AbstractChannel$AbstractUnsafe$2.operationComplete(AbstractChannel.java:385) at io.netty.channel.AbstractChannel$AbstractUnsafe$2.operationComplete(AbstractChannel.java:374) at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:603) at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:570) at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:505) at io.netty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:649) at io.netty.util.concurrent.DefaultPromise.setSuccess0(DefaultPromise.java:638) at io.netty.util.concurrent.DefaultPromise.setSuccess(DefaultPromise.java:110) at io.netty.channel.DefaultChannelPromise.setSuccess(DefaultChannelPromise.java:78) at io.netty.channel.DefaultChannelPromise.setSuccess(DefaultChannelPromise.java:73) at io.netty.channel.nio.AbstractNioChannel.lambda$doRegister$0(AbstractNioChannel.java:465) at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:603) at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:570) at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:505) at io.netty.util.concurrent.DefaultPromise.addListener(DefaultPromise.java:198) at io.netty.util.concurrent.DefaultPromise.addListener(DefaultPromise.java:36) at io.netty.channel.nio.AbstractNioChannel.doRegister(AbstractNioChannel.java:462) at io.netty.channel.AbstractChannel$AbstractUnsafe.register0(AbstractChannel.java:408) at io.netty.channel.AbstractChannel$AbstractUnsafe.access$300(AbstractChannel.java:288) at io.netty.channel.AbstractChannel$AbstractUnsafe$1.run(AbstractChannel.java:352) at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:148) at io.netty.util.concurrent.AbstractEventExecutor.safeExecute$$$capture(AbstractEventExecutor.java:141) at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java) at --- Async.Stack.Trace --- (captured by IntelliJ IDEA debugger) at io.netty.util.concurrent.SingleThreadEventExecutor.addTask(SingleThreadEventExecutor.java) at io.netty.util.concurrent.SingleThreadEventExecutor.execute(SingleThreadEventExecutor.java:907) at io.netty.util.concurrent.SingleThreadEventExecutor.execute0(SingleThreadEventExecutor.java:873) at io.netty.util.concurrent.SingleThreadEventExecutor.execute(SingleThreadEventExecutor.java:863) at io.netty.channel.AbstractChannel$AbstractUnsafe.register(AbstractChannel.java:349) at io.netty.channel.SingleThreadEventLoop.register(SingleThreadEventLoop.java:119) at io.netty.channel.SingleThreadEventLoop.register(SingleThreadEventLoop.java:113) at io.netty.channel.MultithreadEventLoopGroup.register(MultithreadEventLoopGroup.java:86) at io.netty.bootstrap.AbstractBootstrap.initAndRegister(AbstractBootstrap.java:339) at io.netty.bootstrap.AbstractBootstrap.doBind(AbstractBootstrap.java:288) at io.netty.bootstrap.AbstractBootstrap.bind(AbstractBootstrap.java:284) at io.netty.bootstrap.AbstractBootstrap.bind(AbstractBootstrap.java:262) at server.TcpServer.start(TcpServer.java:75) at TcpServerClientTest.lambda$startServer$0(TcpServerClientTest.java:45) at java.lang.Thread.run(Thread.java:750) Suppressed: java.util.concurrent.CompletionException: Rethrowing promise failure cause at io.netty.util.concurrent.DefaultPromise.rethrowIfFailed(DefaultPromise.java:685) at io.netty.util.concurrent.DefaultPromise.sync(DefaultPromise.java:419) at io.netty.channel.DefaultChannelPromise.sync(DefaultChannelPromise.java:119) at io.netty.channel.DefaultChannelPromise.sync(DefaultChannelPromise.java:30) ... 3 more Exception in thread "Thread-4" java.net.BindException: Address already in use: bind at sun.nio.ch.Net.bind0(Native Method) at sun.nio.ch.Net.bind(Net.java:461) at sun.nio.ch.Net.bind(Net.java:453) at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:222) at io.netty.channel.socket.nio.NioServerSocketChannel.doBind(NioServerSocketChannel.java:148) at io.netty.channel.AbstractChannel$AbstractUnsafe.bind(AbstractChannel.java:434) at io.netty.channel.DefaultChannelPipeline$HeadContext.bind(DefaultChannelPipeline.java:1353) at io.netty.channel.AbstractChannelHandlerContext.invokeBind(AbstractChannelHandlerContext.java:492) at io.netty.channel.AbstractChannelHandlerContext.bind(AbstractChannelHandlerContext.java:471) at io.netty.channel.DefaultChannelPipeline.bind(DefaultChannelPipeline.java:994) at io.netty.channel.Channel.bind(Channel.java:302) at io.netty.bootstrap.AbstractBootstrap$2.run(AbstractBootstrap.java:380) at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:148) at io.netty.util.concurrent.AbstractEventExecutor.safeExecute$$$capture(AbstractEventExecutor.java:141) at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java) at --- Async.Stack.Trace --- (captured by IntelliJ IDEA debugger) at io.netty.util.concurrent.SingleThreadEventExecutor.addTask(SingleThreadEventExecutor.java) at io.netty.util.concurrent.SingleThreadEventExecutor.execute(SingleThreadEventExecutor.java:907) at io.netty.util.concurrent.SingleThreadEventExecutor.execute0(SingleThreadEventExecutor.java:873) at io.netty.util.concurrent.SingleThreadEventExecutor.execute(SingleThreadEventExecutor.java:863) at io.netty.bootstrap.AbstractBootstrap.doBind0(AbstractBootstrap.java:376) at io.netty.bootstrap.AbstractBootstrap.access$000(AbstractBootstrap.java:54) at io.netty.bootstrap.AbstractBootstrap$1.operationComplete(AbstractBootstrap.java:315) at io.netty.bootstrap.AbstractBootstrap$1.operationComplete(AbstractBootstrap.java:302) at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:603) at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:570) at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:505) at io.netty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:649) at io.netty.util.concurrent.DefaultPromise.setSuccess0(DefaultPromise.java:638) at io.netty.util.concurrent.DefaultPromise.trySuccess(DefaultPromise.java:118) at io.netty.channel.DefaultChannelPromise.trySuccess(DefaultChannelPromise.java:84) at io.netty.channel.AbstractChannel$AbstractUnsafe.safeSetSuccess(AbstractChannel.java:861) at io.netty.channel.AbstractChannel$AbstractUnsafe$2.operationComplete(AbstractChannel.java:385) at io.netty.channel.AbstractChannel$AbstractUnsafe$2.operationComplete(AbstractChannel.java:374) at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:603) at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:570) at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:505) at io.netty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:649) at io.netty.util.concurrent.DefaultPromise.setSuccess0(DefaultPromise.java:638) at io.netty.util.concurrent.DefaultPromise.setSuccess(DefaultPromise.java:110) at io.netty.channel.DefaultChannelPromise.setSuccess(DefaultChannelPromise.java:78) at io.netty.channel.DefaultChannelPromise.setSuccess(DefaultChannelPromise.java:73) at io.netty.channel.nio.AbstractNioChannel.lambda$doRegister$0(AbstractNioChannel.java:465) at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:603) at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:570) at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:505) at io.netty.util.concurrent.DefaultPromise.addListener(DefaultPromise.java:198) at io.netty.util.concurrent.DefaultPromise.addListener(DefaultPromise.java:36) at io.netty.channel.nio.AbstractNioChannel.doRegister(AbstractNioChannel.java:462) at io.netty.channel.AbstractChannel$AbstractUnsafe.register0(AbstractChannel.java:408) at io.netty.channel.AbstractChannel$AbstractUnsafe.access$300(AbstractChannel.java:288) at io.netty.channel.AbstractChannel$AbstractUnsafe$1.run(AbstractChannel.java:352) at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:148) at io.netty.util.concurrent.AbstractEventExecutor.safeExecute$$$capture(AbstractEventExecutor.java:141) at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java) at --- Async.Stack.Trace --- (captured by IntelliJ IDEA debugger) at io.netty.util.concurrent.SingleThreadEventExecutor.addTask(SingleThreadEventExecutor.java) at io.netty.util.concurrent.SingleThreadEventExecutor.execute(SingleThreadEventExecutor.java:907) at io.netty.util.concurrent.SingleThreadEventExecutor.execute0(SingleThreadEventExecutor.java:873) at io.netty.util.concurrent.SingleThreadEventExecutor.execute(SingleThreadEventExecutor.java:863) at io.netty.channel.AbstractChannel$AbstractUnsafe.register(AbstractChannel.java:349) at io.netty.channel.SingleThreadEventLoop.register(SingleThreadEventLoop.java:119) at io.netty.channel.SingleThreadEventLoop.register(SingleThreadEventLoop.java:113) at io.netty.channel.MultithreadEventLoopGroup.register(MultithreadEventLoopGroup.java:86) at io.netty.bootstrap.AbstractBootstrap.initAndRegister(AbstractBootstrap.java:339) at io.netty.bootstrap.AbstractBootstrap.doBind(AbstractBootstrap.java:288) at io.netty.bootstrap.AbstractBootstrap.bind(AbstractBootstrap.java:284) at io.netty.bootstrap.AbstractBootstrap.bind(AbstractBootstrap.java:262) at server.TcpServer.start(TcpServer.java:75) at TcpServerClientTest.lambda$testResponseTimeout$1(TcpServerClientTest.java:119) at java.lang.Thread.run(Thread.java:750) Suppressed: java.util.concurrent.CompletionException: Rethrowing promise failure cause at io.netty.util.concurrent.DefaultPromise.rethrowIfFailed(DefaultPromise.java:685) at io.netty.util.concurrent.DefaultPromise.sync(DefaultPromise.java:419) at io.netty.channel.DefaultChannelPromise.sync(DefaultChannelPromise.java:119) at io.netty.channel.DefaultChannelPromise.sync(DefaultChannelPromise.java:30) ... 3 more [main] INFO client.TcpClient - 客户端连接成功,目标地址:127.0.0.1:8080 Duplicate field name "__$hits$__" with signature "[I" in class file io/netty/buffer/AllocateChunkEvent JfrClassAdapter: unable to create InstanceKlass Duplicate field name "__$hits$__" with signature "[I" in class file io/netty/buffer/AllocateBufferEvent JfrClassAdapter: unable to create InstanceKlass Duplicate field name "__$hits$__" with signature "[I" in class file io/netty/buffer/FreeBufferEvent JfrClassAdapter: unable to create InstanceKlass [main] INFO server.TcpServer - 服务器已关闭 org.opentest4j.AssertionFailedError: expected: null but was: model.GreetResponse@e7529ac 预期:null 实际:model.GreetResponse@e7529ac;Exception in thread "Thread-5" java.net.BindException: Address already in use: bind at sun.nio.ch.Net.bind0(Native Method) at sun.nio.ch.Net.bind(Net.java:461) at sun.nio.ch.Net.bind(Net.java:453) at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:222) at io.netty.channel.socket.nio.NioServerSocketChannel.doBind(NioServerSocketChannel.java:148) at io.netty.channel.AbstractChannel$AbstractUnsafe.bind(AbstractChannel.java:434) at io.netty.channel.DefaultChannelPipeline$HeadContext.bind(DefaultChannelPipeline.java:1353) at io.netty.channel.AbstractChannelHandlerContext.invokeBind(AbstractChannelHandlerContext.java:492) at io.netty.channel.AbstractChannelHandlerContext.bind(AbstractChannelHandlerContext.java:471) at io.netty.channel.DefaultChannelPipeline.bind(DefaultChannelPipeline.java:994) at io.netty.channel.Channel.bind(Channel.java:302) at io.netty.bootstrap.AbstractBootstrap$2.run(AbstractBootstrap.java:380) at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:148) at io.netty.util.concurrent.AbstractEventExecutor.safeExecute$$$capture(AbstractEventExecutor.java:141) at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java) at --- Async.Stack.Trace --- (captured by IntelliJ IDEA debugger) at io.netty.util.concurrent.SingleThreadEventExecutor.addTask(SingleThreadEventExecutor.java) at io.netty.util.concurrent.SingleThreadEventExecutor.execute(SingleThreadEventExecutor.java:907) at io.netty.util.concurrent.SingleThreadEventExecutor.execute0(SingleThreadEventExecutor.java:873) at io.netty.util.concurrent.SingleThreadEventExecutor.execute(SingleThreadEventExecutor.java:863) at io.netty.bootstrap.AbstractBootstrap.doBind0(AbstractBootstrap.java:376) at io.netty.bootstrap.AbstractBootstrap.access$000(AbstractBootstrap.java:54) at io.netty.bootstrap.AbstractBootstrap$1.operationComplete(AbstractBootstrap.java:315) at io.netty.bootstrap.AbstractBootstrap$1.operationComplete(AbstractBootstrap.java:302) at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:603) at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:570) at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:505) at io.netty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:649) at io.netty.util.concurrent.DefaultPromise.setSuccess0(DefaultPromise.java:638) at io.netty.util.concurrent.DefaultPromise.trySuccess(DefaultPromise.java:118) at io.netty.channel.DefaultChannelPromise.trySuccess(DefaultChannelPromise.java:84) at io.netty.channel.AbstractChannel$AbstractUnsafe.safeSetSuccess(AbstractChannel.java:861) at io.netty.channel.AbstractChannel$AbstractUnsafe$2.operationComplete(AbstractChannel.java:385) at io.netty.channel.AbstractChannel$AbstractUnsafe$2.operationComplete(AbstractChannel.java:374) at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:603) at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:570) at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:505) at io.netty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:649) at io.netty.util.concurrent.DefaultPromise.setSuccess0(DefaultPromise.java:638) at io.netty.util.concurrent.DefaultPromise.setSuccess(DefaultPromise.java:110) at io.netty.channel.DefaultChannelPromise.setSuccess(DefaultChannelPromise.java:78) at io.netty.channel.DefaultChannelPromise.setSuccess(DefaultChannelPromise.java:73) at io.netty.channel.nio.AbstractNioChannel.lambda$doRegister$0(AbstractNioChannel.java:465) at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:603) at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:570) at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:505) at io.netty.util.concurrent.DefaultPromise.addListener(DefaultPromise.java:198) at io.netty.util.concurrent.DefaultPromise.addListener(DefaultPromise.java:36) at io.netty.channel.nio.AbstractNioChannel.doRegister(AbstractNioChannel.java:462) at io.netty.channel.AbstractChannel$AbstractUnsafe.register0(AbstractChannel.java:408) at io.netty.channel.AbstractChannel$AbstractUnsafe.access$300(AbstractChannel.java:288) at io.netty.channel.AbstractChannel$AbstractUnsafe$1.run(AbstractChannel.java:352) at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:148) at io.netty.util.concurrent.AbstractEventExecutor.safeExecute$$$capture(AbstractEventExecutor.java:141) at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java) at --- Async.Stack.Trace --- (captured by IntelliJ IDEA debugger) at io.netty.util.concurrent.SingleThreadEventExecutor.addTask(SingleThreadEventExecutor.java) at io.netty.util.concurrent.SingleThreadEventExecutor.execute(SingleThreadEventExecutor.java:907) at io.netty.util.concurrent.SingleThreadEventExecutor.execute0(SingleThreadEventExecutor.java:873) at io.netty.util.concurrent.SingleThreadEventExecutor.execute(SingleThreadEventExecutor.java:863) at io.netty.channel.AbstractChannel$AbstractUnsafe.register(AbstractChannel.java:349) at io.netty.channel.SingleThreadEventLoop.register(SingleThreadEventLoop.java:119) at io.netty.channel.SingleThreadEventLoop.register(SingleThreadEventLoop.java:113) at io.netty.channel.MultithreadEventLoopGroup.register(MultithreadEventLoopGroup.java:86) at io.netty.bootstrap.AbstractBootstrap.initAndRegister(AbstractBootstrap.java:339) at io.netty.bootstrap.AbstractBootstrap.doBind(AbstractBootstrap.java:288) at io.netty.bootstrap.AbstractBootstrap.bind(AbstractBootstrap.java:284) at io.netty.bootstrap.AbstractBootstrap.bind(AbstractBootstrap.java:262) at server.TcpServer.start(TcpServer.java:75) at TcpServerClientTest.lambda$startServer$0(TcpServerClientTest.java:45) at java.lang.Thread.run(Thread.java:750) Suppressed: java.util.concurrent.CompletionException: Rethrowing promise failure cause at io.netty.util.concurrent.DefaultPromise.rethrowIfFailed(DefaultPromise.java:685) at io.netty.util.concurrent.DefaultPromise.sync(DefaultPromise.java:419) at io.netty.channel.DefaultChannelPromise.sync(DefaultChannelPromise.java:119) at io.netty.channel.DefaultChannelPromise.sync(DefaultChannelPromise.java:30) ... 3 more [main] INFO server.TcpServer - 服务器已关闭 [main] INFO client.TcpClient - 客户端连接成功,目标地址:127.0.0.1:8080 [main] INFO client.TcpClient - 客户端已关闭 [main] INFO server.TcpServer - 服务器已关闭 org.opentest4j.AssertionFailedError: Expecting value to be true but was false 预期:true 实际:false 请分析原因并尝试解决
最新发布
08-23
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值