android开发学习——Mina框架
生活随笔
收集整理的這篇文章主要介紹了
android开发学习——Mina框架
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
Apache Mina Server 是一個網(wǎng)絡(luò)通信應(yīng)用框架,對socket進(jìn)行了封裝。
http://www.cnblogs.com/moonandstar08/p/5475766.html?
http://blog.csdn.net/u010739551/article/details/47361365?
http://www.cnblogs.com/yanghuiping/p/4108063.html ?(mina 自定義編解碼)
Client端:
public class MinaClient {public static void main(String[] args) throws Exception{//1.NioSocketConnector connector = new NioSocketConnector();
//2.connector.setHandler(new MyClientHandler());
//3.所有收發(fā)的消息都會經(jīng)過攔截器,經(jīng)攔截器進(jìn)行消息的處理connector.getFilterChain().addLast("codec", new ProtocolCodecFilter(new TextLineCodecFactory()));
//4.ConnectFuture future = connector.connect(new InetSocketAddress("127.0.0.1", 9898));future.awaitUninterruptibly();IoSession session = future.getSession();BufferedReader inputReader = new BufferedReader(new InputStreamReader(System.in));String inputContent;while (!(inputContent = inputReader.readLine()).equals("bye")) {session.write(inputContent);}}}
將網(wǎng)絡(luò)和消息處理的代碼分開
public class MyClientHandler extends IoHandlerAdapter {@Overridepublic void exceptionCaught(IoSession session, Throwable cause)throws Exception {System.out.println("exceptionCaught");}@Overridepublic void messageReceived(IoSession session, Object message)throws Exception {String s = (String) message;System.out.println("messageReceived: " + s);}@Overridepublic void messageSent(IoSession session, Object message) throws Exception {System.out.println("messageSent");}@Overridepublic void sessionClosed(IoSession session) throws Exception {System.out.println("sessionClosed");}@Overridepublic void sessionCreated(IoSession session) throws Exception {System.out.println("sessionCreated");}@Overridepublic void sessionIdle(IoSession session, IdleStatus status)throws Exception {System.out.println("sessionIdle");}@Overridepublic void sessionOpened(IoSession session) throws Exception {System.out.println("sessionOpened");}}Server端:
public class MinaServer {public static void main(String[] args) {try {//1.NioSocketAcceptor acceptor = new NioSocketAcceptor();//2.網(wǎng)絡(luò)管理和消息處理的分割開來; MyServerHandler()專門處理消息分發(fā)和會話管理acceptor.setHandler(new MyServerHandler());//3.攔截器,責(zé)任鏈設(shè)計模式。所有收發(fā)的消息全部要經(jīng)過攔截器過濾之后,消息才可以收發(fā);//網(wǎng)絡(luò)上傳輸是字節(jié),攔截器做對象的轉(zhuǎn)換工作;//ProtocolCodecFilter 二進(jìn)制數(shù)據(jù)和對象進(jìn)行轉(zhuǎn)化;MyTextLineFactory()內(nèi)置的,對傳輸數(shù)據(jù)進(jìn)行加解碼acceptor.getFilterChain().addLast("codec", new ProtocolCodecFilter(new MyTextLineFactory()));//每隔5秒,檢查客戶端是否處于空閑狂態(tài),檢測客戶端是否掉線acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 5);//4.服務(wù)器端口啟動起來,監(jiān)聽9898acceptor.bind(new InetSocketAddress(9898));} catch (IOException e) {e.printStackTrace();}}}?
public class MyServerHandler extends IoHandlerAdapter {@Overridepublic void exceptionCaught(IoSession session, Throwable cause)throws Exception {System.out.println("exceptionCaught");}@Overridepublic void messageReceived(IoSession session, Object message)throws Exception {String s = (String) message;System.out.println("messageReceived: " + s);session.write("server reply: " + s);}@Overridepublic void messageSent(IoSession session, Object message) throws Exception {System.out.println("messageSent");}@Overridepublic void sessionClosed(IoSession session) throws Exception {System.out.println("sessionClosed");}@Overridepublic void sessionCreated(IoSession session) throws Exception {System.out.println("sessionCreated");}//客戶端進(jìn)入空閑狀態(tài),檢測 客戶端 是否掉線@Overridepublic void sessionIdle(IoSession session, IdleStatus status)throws Exception {System.out.println("sessionIdle");}@Overridepublic void sessionOpened(IoSession session) throws Exception {System.out.println("sessionOpened");}}
?
public class MyTextLineFactory implements ProtocolCodecFactory {private MyTextLineDecoder mDecoder;private MyTextLineCumulativeDecoder mCumulativeDecoder;private MyTextLineEncoder mEncoder;public MyTextLineFactory () {mDecoder = new MyTextLineDecoder();mEncoder = new MyTextLineEncoder();mCumulativeDecoder = new MyTextLineCumulativeDecoder();}@Overridepublic ProtocolDecoder getDecoder(IoSession arg0) throws Exception {return mCumulativeDecoder;}@Overridepublic ProtocolEncoder getEncoder(IoSession arg0) throws Exception {return mEncoder;}}?
public class MyTextLineCumulativeDecoder extends CumulativeProtocolDecoder {@Overrideprotected boolean doDecode(IoSession session, IoBuffer in,ProtocolDecoderOutput out) throws Exception {int startPosition = in.position();while (in.hasRemaining()) {byte b = in.get();if (b == '\n') {int currentPositoin = in.position();int limit = in.limit();in.position(startPosition);in.limit(currentPositoin);IoBuffer buf = in.slice();byte [] dest = new byte[buf.limit()];buf.get(dest);String str = new String(dest);out.write(str);in.position(currentPositoin);in.limit(limit);return true;}}in.position(startPosition);return false;}}?
public class MyTextLineEncoder implements ProtocolEncoder {@Overridepublic void dispose(IoSession arg0) throws Exception {}@Overridepublic void encode(IoSession session, Object message, ProtocolEncoderOutput out)throws Exception {String s =null;if (message instanceof String) {s = (String) message;}if (s != null) {CharsetEncoder charsetEndoer = (CharsetEncoder)session.getAttribute("encoder");if (charsetEndoer == null) {charsetEndoer = Charset.defaultCharset().newEncoder();session.setAttribute("encoder", charsetEndoer);}IoBuffer ioBuffer = IoBuffer.allocate(s.length());ioBuffer.setAutoExpand(true);ioBuffer.putString(s, charsetEndoer);ioBuffer.flip();out.write(ioBuffer);}}}?
public class MyTextLineDecoder implements ProtocolDecoder {@Overridepublic void decode(IoSession session, IoBuffer in, ProtocolDecoderOutput out)throws Exception {int startPosition = in.position();while (in.hasRemaining()) {byte b = in.get();if (b == '\n') {int currentPositoin = in.position();int limit = in.limit();in.position(startPosition);in.limit(currentPositoin);IoBuffer buf = in.slice();byte [] dest = new byte[buf.limit()];buf.get(dest);String str = new String(dest);out.write(str);in.position(currentPositoin);in.limit(limit);}}}@Overridepublic void dispose(IoSession arg0) throws Exception {}@Overridepublic void finishDecode(IoSession arg0, ProtocolDecoderOutput arg1)throws Exception {}}?
轉(zhuǎn)載于:https://www.cnblogs.com/mengxiao/p/7503713.html
總結(jié)
以上是生活随笔為你收集整理的android开发学习——Mina框架的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: server2003进入oracle,w
- 下一篇: 打包上架