From 2fd12b936103c782058ae0ef0eb234e1df65b35a Mon Sep 17 00:00:00 2001 From: weidong Date: Sun, 20 Jul 2025 21:57:45 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E4=BF=AE=E6=94=B9TCP=E7=9A=84?= =?UTF-8?q?=E9=87=8D=E8=BF=9E=E6=9C=BA=E5=88=B6=EF=BC=8C=E5=8F=AA=E6=9C=89?= =?UTF-8?q?=E5=9C=A8=E5=8F=91=E9=80=81=E6=95=B0=E6=8D=AE=E6=97=B6=E6=89=8D?= =?UTF-8?q?connect?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../imdroid/beidou_fwd/service/TCPClient.java | 26 +++++++++++++++---- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/sec-beidou-fwd/src/main/java/com/imdroid/beidou_fwd/service/TCPClient.java b/sec-beidou-fwd/src/main/java/com/imdroid/beidou_fwd/service/TCPClient.java index 4576454f..587c7bdc 100644 --- a/sec-beidou-fwd/src/main/java/com/imdroid/beidou_fwd/service/TCPClient.java +++ b/sec-beidou-fwd/src/main/java/com/imdroid/beidou_fwd/service/TCPClient.java @@ -29,7 +29,7 @@ public class TCPClient { TCPListener listener; public void start() { - new Thread(this::connect, host+":"+port+" forwarder tcp-client").start(); + //new Thread(this::connect, host+":"+port+" forwarder tcp-client").start(); } public void init(String dest_addr, int dest_port, TCPListener listener) { @@ -64,14 +64,14 @@ public class TCPClient { if (!future.isSuccess()) { logger.info("{}:{} tcp connect failed. {}",host,port,future.cause().toString()); //重连交给后端线程执行 - future.channel().eventLoop().schedule(() -> { + /*future.channel().eventLoop().schedule(() -> { logger.info("{}:{} tcp client reconnect",host,port); try { connect(); } catch (Exception e) { e.printStackTrace(); } - }, 5000, TimeUnit.MILLISECONDS); + }, 5000, TimeUnit.MILLISECONDS);*/ } else { /*future.channel().config().setWriteBufferWaterMark(new WriteBufferWaterMark( 1024 * 1024, // low @@ -89,10 +89,26 @@ public class TCPClient { } } + boolean tryReconnect() throws Exception{ + new Thread(this::connect, host+":"+port+" forwarder tcp-client").start(); + for(int i=0; i<20; i++){ + Thread.sleep(50); + if(channel.isActive()) return true; + } + return false; + } + public void writeAndFlush(String json) { ByteBuf sendBuffer = Unpooled.buffer(); sendBuffer.writeBytes(json.getBytes(StandardCharsets.UTF_8)); logger.info("send to {}: {}",host,json); + if(!channel.isActive()){ + try { + if(!tryReconnect()) return; + } catch (Exception e) { + logger.error(e.toString()); + } + } channel.writeAndFlush(sendBuffer).addListener(future -> { if (future.isSuccess()) { logger.info("send to tcp:"+host+" succeed."); @@ -110,7 +126,7 @@ public class TCPClient { } public void onDisconnect(boolean isIdle){ - if(connectTime.isBefore(LocalDateTime.now().minusMinutes(1))) { + /*if(connectTime.isBefore(LocalDateTime.now().minusMinutes(1))) { connect(); } else{ @@ -121,7 +137,7 @@ public class TCPClient { logger.error(e.toString()); } },isIdle?30:10, TimeUnit.SECONDS); - } + }*/ } public void onMessage(String msg){