核心库
Mima官网:https://mina.apache.org/mina-project/index.html
请自行下载mina核心库的jar包和相关依赖
核心代码
- 服务端
package minademo;
import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.transport.socket.SocketAcceptor;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
import java.net.InetSocketAddress;
public class MinaServerDemo {
public static void main(String[] args) {
try {
// 创建一个非阻塞的 server端的nio
SocketAcceptor socketAcceptor = new NioSocketAcceptor();
DefaultIoFilterChainBuilder filterChain = socketAcceptor.getFilterChain();
// 设定一个过滤器, 一行一行的读取数据(/r/n)
filterChain.addLast("myChain", new ProtocolCodecFilter(new TextLineCodecFactory()));
// 设置消息处理器
socketAcceptor.setHandler(new MinaServerHandler());
// 服务器端口号
int port = 9999;
// 绑定端口,启动服务器
socketAcceptor.bind(new InetSocketAddress(port));
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("mina server running, listening on: 9999");
}
}
- 服务端消息处理类
package minademo;
import org.apache.mina.core.service.IoHandler;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.session.IoSession;
public class MinaServerHandler implements IoHandler {
@Override
public void sessionCreated(IoSession ioSession) throws Exception {
}
@Override
public void sessionOpened(IoSession ioSession) throws Exception {
System.out.println("welome client " + ioSession.getRemoteAddress());
}
@Override
public void sessionClosed(IoSession ioSession) throws Exception {
System.out.println("client close");
}
@Override
public void sessionIdle(IoSession ioSession, IdleStatus idleStatus) throws Exception {
}
@Override
public void exceptionCaught(IoSession ioSession, Throwable throwable) throws Exception {
}
@Override
public void messageReceived(IoSession ioSession, Object o) throws Exception {
String msg = (String) o;
System.out.println("收到客户端的消息:" + msg);
ioSession.write("echo: " + msg);
}
@Override
public void messageSent(IoSession ioSession, Object o) throws Exception {
}
@Override
public void inputClosed(IoSession ioSession) throws Exception {
}
}
- 客户端
package minademo;
import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder;
import org.apache.mina.core.future.ConnectFuture;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.transport.socket.nio.NioSocketConnector;
import java.net.InetSocketAddress;
import java.util.Scanner;
public class MinaClientDemo {
public static void main(String[] args) {
NioSocketConnector nioSocketConnector = new NioSocketConnector();
DefaultIoFilterChainBuilder filterChain = nioSocketConnector.getFilterChain();
filterChain.addLast("myChain", new ProtocolCodecFilter(new TextLineCodecFactory()));
nioSocketConnector.setHandler(new MinaClientHandler());
nioSocketConnector.setConnectTimeoutMillis(10000);
// 连接服务器
ConnectFuture localhost = nioSocketConnector.connect(new InetSocketAddress("localhost", 9999));
// 等待连接成功
localhost.awaitUninterruptibly();
Scanner input = new Scanner(System.in);
while (true) {
System.out.println("请输入消息");
String msg = input.nextLine();
// 发送消息
localhost.getSession().write(msg);
}
// 等待服务器连接关闭,结束长连接
// localhost.getSession().getCloseFuture().awaitUninterruptibly();
// 关闭连接
// nioSocketConnector.dispose();
}
}
- 客户端消息处理类
package minademo;
import org.apache.mina.core.service.IoHandler;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.session.IoSession;
public class MinaClientHandler implements IoHandler {
@Override
public void sessionCreated(IoSession ioSession) throws Exception {
}
@Override
public void sessionOpened(IoSession ioSession) throws Exception {
System.out.println("session open");
}
@Override
public void sessionClosed(IoSession ioSession) throws Exception {
System.out.println("session close");
}
@Override
public void sessionIdle(IoSession ioSession, IdleStatus idleStatus) throws Exception {
}
@Override
public void exceptionCaught(IoSession ioSession, Throwable throwable) throws Exception {
}
@Override
public void messageReceived(IoSession ioSession, Object o) throws Exception {
String msg = (String) o;
System.out.println("客户端收到服务器的消息:" + msg);
}
@Override
public void messageSent(IoSession ioSession, Object o) throws Exception {
}
@Override
public void inputClosed(IoSession ioSession) throws Exception {
}
}