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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android开发学习——Mina框架

發(fā)布時間:2023/12/19 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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),檢測 客戶端 是否掉線@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 {}}

?

轉(zhuǎn)載于:https://www.cnblogs.com/mengxiao/p/7503713.html

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。