日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android开发学习——Mina框架

發布時間:2023/12/19 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android开发学习——Mina框架 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Apache Mina Server 是一個網絡通信應用框架,對socket進行了封裝。

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.所有收發的消息都會經過攔截器,經攔截器進行消息的處理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);}}}

將網絡和消息處理的代碼分開

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.網絡管理和消息處理的分割開來; MyServerHandler()專門處理消息分發和會話管理acceptor.setHandler(new MyServerHandler());//3.攔截器,責任鏈設計模式。所有收發的消息全部要經過攔截器過濾之后,消息才可以收發;//網絡上傳輸是字節,攔截器做對象的轉換工作;//ProtocolCodecFilter 二進制數據和對象進行轉化;MyTextLineFactory()內置的,對傳輸數據進行加解碼acceptor.getFilterChain().addLast("codec", new ProtocolCodecFilter(new MyTextLineFactory()));//每隔5秒,檢查客戶端是否處于空閑狂態,檢測客戶端是否掉線acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 5);//4.服務器端口啟動起來,監聽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");}
//客戶端進入空閑狀態,檢測 客戶端 是否掉線@Override
public 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 {}}

?

轉載于:https://www.cnblogs.com/mengxiao/p/7503713.html

總結

以上是生活随笔為你收集整理的android开发学习——Mina框架的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。