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