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