服务端:
import org.apache.mina.core.service.IoAcceptor;
import org.apache.mina.core.session.IdleStatus;
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 java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.charset.Charset;
public class minaServer {
static int PORT = 666;
static IoAcceptor acceptor = null;
public static void main(String[] args) {
try {
acceptor = new NioSocketAcceptor();
// 设置编码格式
acceptor.getFilterChain().addLast("codec",new ProtocolCodecFilter(
new TextLineCodecFactory(Charset.forName("UTF-8"), LineDelimiter.WINDOWS.getValue(),
LineDelimiter.WINDOWS.getValue())
));
// 设置缓冲区
acceptor.getSessionConfig().setReadBufferSize(1024);
// 10ms不操作进入空闲状态
acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE,10);
// 设置处理handler
acceptor.setHandler(new Myhandler());
// 绑定端口
acceptor.bind(new InetSocketAddress(PORT));
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("Server:__>"+PORT);
}
}
Myhandler:
public class Myhandler extends IoHandlerAdapter {
public Myhandler() {
super();
}
@Override
public void sessionCreated(IoSession session) throws Exception {
System.out.println("Session Created");
}
@Override
public void sessionOpened(IoSession session) throws Exception {
System.out.println("Session Opened");
}
@Override
public void sessionClosed(IoSession session) throws Exception {
System.out.println("Session Closed");
}
@Override
public void sessionIdle(IoSession session, IdleStatus status) throws Exception {
System.out.println("Session Idle");
}
@Override
public void exceptionCaught(IoSession session, Throwable cause) throws Exception {
System.out.println("exception Caught");
}
@Override
public void messageReceived(IoSession session, Object message) throws Exception {
String msg = (String) message;
System.out.println("服务端接收数据");
System.out.println(msg);
if(msg.equals("exit")){
session.close();
}
Date date = new Date();
session.write(date);
}
@Override
public void messageSent(IoSession session, Object message) throws Exception {
System.out.println("messageSent");
}
}
尝试访问:
客户端:
MinaClient:
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.NioSocketConnector;
import java.net.InetSocketAddress;
import java.nio.charset.Charset;
public class MinaClient {
private static String host = "127.0.0.1";
private static int port = 666;
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());
ConnectFuture connect = connector.connect(new InetSocketAddress(host, port));
connect.awaitUninterruptibly(); //等待连接,阻塞
session = connect.getSession();
session.write("泥豪!");
session.getCloseFuture().awaitUninterruptibly();//等待关闭连接
connector.dispose();
}
}
MyclientHandler:
public class MyClientHandler extends IoHandlerAdapter {
public MyClientHandler() {
super();
}
@Override
public void sessionCreated(IoSession session) throws Exception {
System.out.println("sessionCreated");
}
@Override
public void sessionOpened(IoSession session) throws Exception {
System.out.println("sessionOpened");
}
@Override
public void sessionClosed(IoSession session) throws Exception {
System.out.println("sessionClosed");
}
@Override
public void sessionIdle(IoSession session, IdleStatus status) throws Exception {
System.out.println("sessionIdle");
}
@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:"+msg);
}
@Override
public void messageSent(IoSession session, Object message) throws Exception {
System.out.println("messageSent");
}
}
输出:
client:
sessionCreated
sessionOpened
messageSent
msg:Wed Feb 09 22:18:17 CST 2022
server:
erver:__>666
Session Created
Session Opened
服务端接收数据
泥豪!
messageSent
Session Idle
总结:
1.NioSocket
2.设置编码解码过滤器
3.设置一些session属性
4.绑定一个端口