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); } } }