Mina框架的學習第二節(伺服器端)
阿新 • • 發佈:2018-11-10
伺服器端使用jar: mina-core-2.0.18.jar slf4j-api-1.7.25.jar
public class MinaServer {
// 埠號,要求客戶端與伺服器端一致
private static int PORT = 8282;
public static void main(String[] args) {
IoAcceptor acceptor = null;
try {
// 建立一個非阻塞的server端的Socket
acceptor = new NioSocketAcceptor();
// 設定過濾器(使用mina提供的文字換行符編解碼器)
acceptor.getFilterChain().addLast("codec",
new ProtocolCodecFilter((ProtocolCodecFactory) new TextLineCodecFactory(Charset.forName("UTF-8"),
LineDelimiter.WINDOWS.getValue(), LineDelimiter.WINDOWS.getValue())));
// 設定讀取資料的換從區大小
acceptor.getSessionConfig().setReadBufferSize(2048);
// 讀寫通道10秒內無操作進入空閒狀態
acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 15);
// 為接收器設定管理服務
acceptor.setHandler(new MinaServerHandler());
// 繫結埠
acceptor.bind(new InetSocketAddress(PORT));
System.out.print("伺服器啟動成功... 埠號未:" + PORT);
} catch (Exception e) {
System.out.print("伺服器啟動異常..." + e.toString());
e.printStackTrace();
}
}
}
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 MinaServerHandler extends IoHandlerAdapter {
// 從埠接受訊息,會響應此方法來對訊息進行處理
@Override
public void messageReceived(IoSession session, Object message) throws Exception {
String msg = message.toString();
if ("exit".equals(msg)) {
// 如果客戶端發來exit,則關閉該連線
session.closeNow();
}
// 向客戶端傳送訊息
Date date = new Date();
session.write(date);
System.out.print("伺服器接受訊息成功...\n");
super.messageReceived(session, message);
}
// 向客服端傳送訊息後會呼叫此方法
@Override
public void messageSent(IoSession session, Object message) throws Exception {
System.out.print("伺服器傳送訊息成功...\n");
super.messageSent(session, message);
}
// 關閉與客戶端的連線時會呼叫此方法
@Override
public void sessionClosed(IoSession session) throws Exception {
System.out.print("伺服器與客戶端斷開連線...\n");
super.sessionClosed(session);
}
// 伺服器與客戶端建立連線
@Override
public void sessionCreated(IoSession session) throws Exception {
System.out.print("\n伺服器與客戶端建立連線...\n");
super.sessionCreated(session);
}
// 伺服器與客戶端連線開啟
@Override
public void sessionOpened(IoSession session) throws Exception {
System.out.print("伺服器與客戶端連線開啟...\n");
super.sessionOpened(session);
}
// 伺服器狀態
@Override
public void sessionIdle(IoSession session, IdleStatus status) throws Exception {
System.out.print("伺服器進入空閒狀態...\n");
super.sessionIdle(session, status);
}
// 伺服器傳送異常態
@Override
public void exceptionCaught(IoSession session, Throwable cause) throws Exception {
System.out.print("伺服器傳送異常...\n");
super.exceptionCaught(session, cause);
}
}
瀏覽器中輸入:http://localhost:8282 點選回車
到此為止,伺服器端就完成了!!!!!!