Mina學習(1):mina實現簡單服務端與客戶端
阿新 • • 發佈:2019-02-15
mina是一個基於javaNio網路通訊應用框架,使用mina可以輕鬆的搭建伺服器,接下來將使用mina搭建一個小型的服務端
- 原始碼–MinaServer.java
package server;
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.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 {
private static int BUFFSIZE = 1024;
private static int PORT = 7080 ; //埠號
private static IoAcceptor acceptor = null;
public static void main(String[] args) {
acceptor = new NioSocketAcceptor();
//設定編碼過濾器
acceptor.getFilterChain().addLast("codec", new ProtocolCodecFilter(
new TextLineCodecFactory(Charset.forName("UTF-8"),
LineDelimiter.WINDOWS .getValue(),
LineDelimiter.WINDOWS.getValue())));
//設定讀緩衝區大小
acceptor.getSessionConfig().setReadBufferSize(BUFFSIZE);
//設定進入空閒狀態的時間 10毫秒
acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10);
//設定Handle 業務處理類
acceptor.setHandler(new MinaHandle());
//繫結埠號並啟動伺服器
try {
acceptor.bind(new InetSocketAddress(PORT));
} catch (IOException e) {
// e.printStackTrace();
}
}
}
- 原始碼–MinaHandle.java
package server;
import java.util.Date;
import org.apache.mina.core.service.IoHandler;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.session.IoSession;
public class MinaHandle implements IoHandler {
@Override
public void exceptionCaught(IoSession arg0, Throwable arg1) throws Exception {
System.out.println("exceptionCaught");
}
@Override
public void inputClosed(IoSession arg0) throws Exception {
System.out.println("inputClosed");
}
@Override
public void messageReceived(IoSession sesion, Object msg) throws Exception {
System.out.println("接收到:"+(String)msg);
//如果接收到exit就關閉連線
if("exit".equals((String)msg)){
sesion.close();
}
else{
Date date = new Date();
sesion.write("\n當前系統時間"+date+"\n");
}
}
@Override
public void messageSent(IoSession arg0, Object arg1) throws Exception {
System.out.println("messageSent");
}
@Override
public void sessionClosed(IoSession arg0) throws Exception {
System.out.println("sessionClosed");
}
@Override
public void sessionCreated(IoSession arg0) throws Exception {
System.out.println("sessionCreated");
}
@Override
public void sessionIdle(IoSession arg0, IdleStatus arg1) throws Exception {
System.out.println("sessionIdle");
}
@Override
public void sessionOpened(IoSession arg0) throws Exception {
System.out.println("sessionOpened");
}
}
- 通過telnet訪問伺服器,每當接收到客戶端傳送的訊息,便會返回系統當前時間,當接收到exit則關閉連線:
連結:
會話: