直接上代碼。關於原理和主要的API以后在說。先能跑通了在說。
主要的包:mina-core-2.0.0.jar【到官網上下載完整項目包里面還有文檔和依賴包】,jcl-over-slf4j-1.5.11.jar,slf4j-api-1.5.11.jar,slf4j-nop-1.5.11.jar這三個是mina使用的日志包。前面二個mina項目包里有。最后一個到官網上下吧。
服務器類:
public class MinaServer { private static final int PORT = 22222;// 定義監聽端口 public static void main(String[] args) throws IOException { //創建一個非阻塞的Server端socket,用NIO IoAcceptor acceptor = new NioSocketAcceptor(); //創建接受數據的過濾器 DefaultIoFilterChainBuilder chain = acceptor.getFilterChain(); //設定這個過濾器將一行一行的讀取數據 chain.addLast("codec",new ProtocolCodecFilter(new TextLineCodecFactory()));// 指定編碼過濾器 // 指定業務邏輯處理器 acceptor.setHandler(new Handler()); // 設置端口號 acceptor.setDefaultLocalAddress(new InetSocketAddress(PORT)); acceptor.bind(); //啟動監聽 System.out.println("Mina Server is Listen on:"+PORT); } }
處理類。用來處理請求連接的。
public class Handler extends IoHandlerAdapter { //當一個客戶端連接進入時 @Override public void sessionOpened(IoSession session)throws Exception { System.out.println("incoming client:"+session.getRemoteAddress()); } //當客戶端發送消息到達時 @Override public void messageReceived(IoSession session, Object message)throws Exception { String s = message.toString(); System.out.println("client send message is:"+s); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd mm:hh:ss"); Date date = new Date(); session.write(sdf.format(date));// 返回當前時間的字符串 System.out.println("message written..."); } //當一個客戶端連接關閉時 @Override public void sessionClosed(IoSession session)throws Exception { System.out.println("one client closed"); } }
服務端就完事兒了。運行MainServer就行了。
然后是測試下。在命令行運行“telnet 127.0.0.1 22222”,當服務器端出現“incoming client:/127.0.0.1:2333”,表示你連接成功了
然后你隨便寫個字符,然后回車。如果可以看到由服務器返回來的時間串就OK了。
- public class Handler extends IoHandlerAdapter {
- //當一個客戶端連接進入時
- @Override
- public void sessionOpened(IoSession session)throws Exception {
- System.out.println("incoming client:"+session.getRemoteAddress());
- }
- //當客戶端發送消息到達時
- @Override
- public void messageReceived(IoSession session, Object message)throws Exception {
- String s = message.toString();
- System.out.println("client send message is:"+s);
- SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd mm:hh:ss");
- Date date = new Date();
- session.write(sdf.format(date));// 返回當前時間的字符串
- System.out.println("message written...");
- }
- //當一個客戶端連接關閉時
- @Override
- public void sessionClosed(IoSession session)throws Exception {
- System.out.println("one client closed");
- }
- }