New file |
| | |
| | | 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; |
| | | } |
| | | } |
| | | } |
| | | } |