mina和netty是同一个作者:向作者致敬!
服务器代码:
首先添加依赖:
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.6.6</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.6.6</version>
</dependency>
<dependency>
<groupId>org.rxtx</groupId>
<artifactId>rxtx</artifactId>
<version>2.1.7</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>org.apache.mina</groupId>
<artifactId>mina-core</artifactId>
<version>2.0.7</version>
</dependency>
server的代码:
package com.mina;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.charset.Charset;
import org.apache.mina.core.service.IoAcceptor;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.filter.codec.ProtocolCodecException;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.LineDelimiter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
public class MinaServer {
static int PORT = 7080;
static IoAcceptor accept = null; // 提供服务端实现
public static void main(String[] args) {
try {
accept = new NioSocketAcceptor();
// 设置过滤器
accept.getFilterChain().addLast(
"codec",
new ProtocolCodecFilter(new TextLineCodecFactory(Charset
.forName("UTF-8"),
LineDelimiter.WINDOWS.getValue(),
LineDelimiter.WINDOWS.getValue())));
// 设置缓冲区
accept.getSessionConfig().setReadBufferSize(1024);// 大小
accept.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10);// 时间10s
accept.setHandler(new MyHandler());// 业务
accept.bind(new InetSocketAddress(PORT));// 绑定端口并启动
System.out.println("Server ->" + PORT);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
MyHandler.java:
package com.mina;
import java.util.Date;
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.session.IoSession;
public class MyHandler extends IoHandlerAdapter{
@Override
public void exceptionCaught(IoSession session, Throwable cause) throws Exception {
System.out.println("exceptionCaught:" + "连接出现异常");
}
@Override
public void messageReceived(IoSession session, Object message)
throws Exception {
String msg = (String)message;
System.out.println("服务端接收到数据:" + msg);
Date date = new Date();
session.write(date); // 用于写入数据并发送
}
@Override
public void messageSent(IoSession session, Object message) throws Exception {
System.out.println("messageSent:" + "发送数据");
}
@Override
public void sessionClosed(IoSession session) throws Exception {
System.out.println("sessionClosed:" + "session关闭");
}
@Override
public void sessionCreated(IoSession session) throws Exception {
System.out.println("sessionCreated:" + "创建Session");
}
@Override
public void sessionIdle(IoSession session, IdleStatus status)
throws Exception {
System.out.println("sessionIdle:" + "处于多长时间是空闲状态");
}
@Override
public void sessionOpened(IoSession session) throws Exception {
System.out.println("sessionOpened:" + "打开Session用于读写数据");
}
}
客户端代码:
package com.mina;
import java.net.InetSocketAddress;
import java.nio.charset.Charset;
import org.apache.mina.core.future.ConnectFuture;
import org.apache.mina.core.service.IoConnector;
import org.apache.mina.core.session.IoSession;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.LineDelimiter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
import org.apache.mina.transport.socket.nio.NioSocketConnector;
/**
* Mina客户端
* @author lenovo
*
*/
public class MinaClient {
private static String host = "127.0.0.1";
private static int port = 7080;
public static void main(String[] args) {
IoSession session = null;
IoConnector connector = new NioSocketConnector();// 提供客户端实现
connector.setConnectTimeout(3000);// 设置超时时间
// 设置过滤器(编码和解码)
connector.getFilterChain().addLast("coderc", new ProtocolCodecFilter(
new TextLineCodecFactory(Charset.forName("UTF-8"),
LineDelimiter.WINDOWS.getValue(),
LineDelimiter.WINDOWS.getValue())));
// 业务处理
connector.setHandler(new MyClientHandler());
// 设置session属性,获取服务端连接
ConnectFuture future = connector.connect(new InetSocketAddress(host,port));
future.awaitUninterruptibly();// 等待我们的连接
session = future.getSession();
session.write("你好!Hello");// 写入数据,发往服务端
session.getCloseFuture().awaitUninterruptibly();// 等待关闭连接
connector.dispose();// 释放资源
}
}
资料来自网上:https://blog.youkuaiyun.com/wang_snake/article/details/79495855