| New file | 
 |  |  | 
 |  |  | package com.dy.rtuMw3rd.tcp4Bjnl; | 
 |  |  |  | 
 |  |  | import com.dy.common.util.Callback; | 
 |  |  | import org.apache.mina.core.future.ConnectFuture; | 
 |  |  | import org.apache.mina.core.session.IoSession; | 
 |  |  | import org.apache.mina.filter.codec.ProtocolCodecFilter; | 
 |  |  | import org.apache.mina.transport.socket.SocketConnector; | 
 |  |  | import org.apache.mina.transport.socket.nio.NioSocketConnector; | 
 |  |  |  | 
 |  |  | import java.net.InetSocketAddress; | 
 |  |  |  | 
 |  |  | /** | 
 |  |  |  * @Author: liurunyu | 
 |  |  |  * @Date: 2025/03/18 14:20 | 
 |  |  |  * @Description | 
 |  |  |  */ | 
 |  |  | public class TcpConnect { | 
 |  |  |  | 
 |  |  |     private static IoSession ioSession ; | 
 |  |  |  | 
 |  |  |     public static IoSession getIoSession(){ | 
 |  |  |         return ioSession; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |      /** | 
 |  |  |      * 判断会话是否有效 | 
 |  |  |      * @return 是否连接 | 
 |  |  |      */ | 
 |  |  |     public static boolean isConnected() { | 
 |  |  |         return (ioSession != null && ioSession.isConnected()); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 创建新会话 | 
 |  |  |      * @param host 服务器URI | 
 |  |  |      * @param port 服务器端口 | 
 |  |  |      * @param connectTimeout 连接超时时长 | 
 |  |  |      * @param handler 数据处理者 | 
 |  |  |      * @param callback 回调 | 
 |  |  |      * @return 网络会话 | 
 |  |  |      */ | 
 |  |  |     public static void createSession(String host , | 
 |  |  |                                int port , | 
 |  |  |                                int connectTimeout , | 
 |  |  |                                TcpHandler handler, | 
 |  |  |                                Callback callback) throws Exception{ | 
 |  |  |         SocketConnector connector = new NioSocketConnector(); | 
 |  |  |         connector.getFilterChain().addLast("codec", new ProtocolCodecFilter(new NetDataCodecFactory())); | 
 |  |  |         connector.setHandler(handler); | 
 |  |  |         ConnectFuture connectFuture = connector.connect(new InetSocketAddress(host, port)); | 
 |  |  |         connectFuture.awaitUninterruptibly(connectTimeout); | 
 |  |  |         ioSession = connectFuture.getSession(); | 
 |  |  |         callback.call(ioSession) ; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 关闭会话联接 | 
 |  |  |      * @param se | 
 |  |  |      * @param connectTimeout | 
 |  |  |      */ | 
 |  |  |     public static void disconnect(IoSession se , int connectTimeout) { | 
 |  |  |         if (se != null) { | 
 |  |  |             try{ | 
 |  |  |                 se.closeNow().awaitUninterruptibly(connectTimeout); | 
 |  |  |             }catch(Exception e){ | 
 |  |  |                 if(se.isConnected()){ | 
 |  |  |                     se.closeNow().awaitUninterruptibly(connectTimeout); | 
 |  |  |                 } | 
 |  |  |             }finally{ | 
 |  |  |                 se = null; | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public static void output(byte[] bs) throws Exception{ | 
 |  |  |         if (!isConnected()) { | 
 |  |  |             throw new Exception("未创建网络连接"); | 
 |  |  |         }else{ | 
 |  |  |             ioSession.write(bs); | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  | } |