准备MINA
<dependency>
<groupId>org.apache.mina</groupId>
<artifactId>mina-core</artifactId>
<version>2.0.7</version>
</dependency>
由于服务端是C写的。这面先写个客户端。使用的是短链接
客户端代码
//抽象客户端父类
public abstract class AbstractMinaProvider implements MinaProvider {
/**
* 主机
*/
private String host = "127.0.0.1";
/**
* 端口号
*/
private int port = 1234;
/**
* 超时时间
*/
private long timeOut = 10;
/**
* 请求类型
*/
private boolean snyc = true;
/**
* socket连接器接口
*/
private SocketConnector connector;
/**
* socket会话配置接口
*/
private SocketSessionConfig sessionConfig;
/**
* 用于connect()后,执行一些操作,获取getSession()等。
*/
private ConnectFuture connectFuture;
/**
* socket会话
*/
private IoSession session;
/**
*构造器,判断是否同步通讯
*/
protected AbstractMinaProvider(boolean sync) {
//读取配置文件
loadConfigs();
// 实例化connector
connector = new NioSocketConnector();
// 添加过滤器,在最后添加编码解码过滤器
connector.getFilterChain().addLast("codec",new ProtocolCodecFilter(new CodecFactory(true))); //没有他就别玩了~
if(sync){//如果是同步传输,使用默认配置。
sessionConfig = getConnector().getSessionConfig();
//开启读方法,设置IoSession的read()方法为可用,默认为false
sessionConfig.setUseReadOperation(true);
}
}
private void loadConfigs() {
//略
}
@Override
public void connect() {
//获得连接
connectFuture = getConnector().connect(new InetSocketAddress(getHost(),getPort()));
//等待连接创建完成
connectFuture.awaitUninterruptibly();
//获取会话
session = connectFuture.getSession();
}
@Override
public void disconnect() {
if(session!=null){
//等待连接断开
session.close(true).awaitUninterruptibly();
session = null;
}
}
//setter/getter略
}
客户端同步通讯子类
代码如下:
public class MinaRunner extends AbstractMinaProvider {
/**
* 构造函数,创建connect、Session,true同步传输
*/
public Mi