package com.dy.simRtu202404.tcpClient; 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/02/26 11:10 * @Description */ public class TcpConnect { /** * 判断会话是否有效 * @param se 网络会话 * @return 是否连接 */ public boolean isConnected(IoSession se) { return (se != null && se.isConnected()); } /** * 创建新会话 * @param host 服务器URI * @param port 服务器端口 * @param connectTimeout 连接超时时长 * @param handler 数据处理者 * @param callback 回调 * @return 网络会话 */ public 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 LocalCodecFactory())); connector.setHandler(handler); ConnectFuture connectFuture = connector.connect(new InetSocketAddress(host, port)); connectFuture.awaitUninterruptibly(connectTimeout); IoSession se = connectFuture.getSession(); callback.call(se) ; } /** * 关闭会话联接 * @param se * @param connectTimeout */ public void disconnect(IoSession se , int connectTimeout) { if (se != null) { try{ se.closeNow().awaitUninterruptibly(connectTimeout); }catch(Exception e){ }finally{ se = null; } } } }