锘??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲综合成人婷婷五月网址,亚洲AⅤ视频一区二区三区 ,亚洲日韩中文字幕在线播放http://www.tkk7.com/paulwong/category/53575.htmlzh-cnTue, 14 May 2013 17:15:45 GMTTue, 14 May 2013 17:15:45 GMT60MINA璧勬簮http://www.tkk7.com/paulwong/archive/2013/05/14/399270.htmlpaulwongpaulwongTue, 14 May 2013 09:41:00 GMThttp://www.tkk7.com/paulwong/archive/2013/05/14/399270.htmlhttp://www.tkk7.com/paulwong/comments/399270.htmlhttp://www.tkk7.com/paulwong/archive/2013/05/14/399270.html#Feedback0http://www.tkk7.com/paulwong/comments/commentRss/399270.htmlhttp://www.tkk7.com/paulwong/services/trackbacks/399270.html http://yaojialing.iteye.com/category/115609

浣跨敤 Apache MINA 2 寮鍙戠綉緇滃簲鐢?br />http://www.ibm.com/developerworks/cn/java/j-lo-mina2/

鐩存帴鎿嶄綔mina鐨処oBuffer嫻?
http://autumnice.blog.163.com/blog/static/555200201011493410310/

pache mina 瀛︿範錛堝崄涓錛?----鐘舵佹満錛坰tateMachine錛?br />http://cages.iteye.com/blog/1530849

榪愮敤 Apache MINA 2 寮鍙戠綉緇滆繍鐢?[澶氬浘]
http://www.lj8lj8.com/chengxukaifa/Java/338853_13.html




paulwong 2013-05-14 17:41 鍙戣〃璇勮
]]>
鍩轟簬Apache Mina瀹炵幇鐨凾CP闀胯繛鎺ュ拰鐭繛鎺ュ疄渚?/title><link>http://www.tkk7.com/paulwong/archive/2013/05/11/399155.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Sat, 11 May 2013 13:56:00 GMT</pubDate><guid>http://www.tkk7.com/paulwong/archive/2013/05/11/399155.html</guid><wfw:comment>http://www.tkk7.com/paulwong/comments/399155.html</wfw:comment><comments>http://www.tkk7.com/paulwong/archive/2013/05/11/399155.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/paulwong/comments/commentRss/399155.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/paulwong/services/trackbacks/399155.html</trackback:ping><description><![CDATA[1銆佸墠璦<br /> <br /> Apache MINA鏄疉pache緇勭粐鐨勪竴涓紭縐鐨勯」鐩侻INA鏄疢ultipurpose Infrastructure for NetworkApplications鐨勭緝鍐欍傚畠鏄竴涓綉緇滃簲鐢ㄧ▼搴忔鏋訛紝鐢ㄦ潵甯姪鐢ㄦ埛闈炲父鏂逛究鍦板紑鍙戦珮鎬ц兘鍜岄珮鍙潬鎬х殑緗戠粶搴旂敤紼嬪簭銆傚湪鏈枃涓粙緇嶄簡 濡備綍閫氳繃Apache Mina2.0鏉ュ疄鐜癟CP鍗忚闀胯繛鎺ュ拰鐭繛鎺ュ簲鐢ㄣ?br /> <br /> 2銆佺郴緇熶粙緇?br /> <br /> 2.1緋葷粺妗嗘灦<br /> <br /> 鏁翠釜緋葷粺鐢變袱涓湇鍔$紼嬪簭鍜屼袱涓鎴風紼嬪簭緇勬垚銆傚垎鍒疄鐜癟CP闀胯繛鎺ュ拰鐭繛鎺ラ氫俊銆?br /> <br /> 緋葷粺涓氬姟閫昏緫鏄竴涓鎴風涓庢湇鍔$寤虹珛闀胯繛鎺ワ紝涓涓鎴風涓庢湇鍔$寤虹珛鐭繛鎺ャ傛暟鎹粠鐭繛鎺ュ鎴風緇忚繃鏈嶅姟绔彂閫佸埌闀胯繛鎺ュ鎴風錛屽茍浠庨暱榪炴帴瀹㈡埛绔帴鏀跺搷搴旀暟鎹傚綋鏀跺埌鍝嶅簲鏁版嵁鍚庢柇寮榪炴帴銆?br /> <br /> 緋葷粺鏋舵瀯鍥懼涓嬶細<br /> <br /> <br /> 2.2澶勭悊嫻佺▼<br /> <br /> 緋葷粺澶勭悊嫻佺▼濡備笅錛?br /> <br /> 1錛? 鍚姩鏈嶅姟绔▼搴忥紝鐩戝惉8001鍜?002绔彛銆?br /> <br /> 2錛? 闀胯繛鎺ュ鎴風鍚戞湇鍔$8002绔彛寤虹珛榪炴帴錛屾湇鍔$灝嗚繛鎺ュ璞′繚瀛樺埌鍏變韓鍐呭瓨涓傜敱浜庨噰鐢ㄩ暱榪炴帴鏂瑰紡錛岃繛鎺ュ璞℃槸鍞竴鐨勩?br /> <br /> 3錛? 鐭繛鎺ュ鎴風鍚戞湇鍔$8001绔彛寤虹珛榪炴帴銆傚緩绔嬭繛鎺ュ悗鍒涘緩涓涓繛鎺ュ璞°?br /> <br /> 4錛? 鐭繛鎺ュ鎴風榪炴帴鎴愬姛鍚庡彂閫佹暟鎹傛湇鍔$鎺ユ敹鍒版暟鎹悗浠庡叡浜唴瀛樹腑寰楀埌闀胯繛鎺ユ柟寮忕殑榪炴帴瀵硅薄錛屼嬌鐢ㄦ瀵硅薄鍚戦暱榪炴帴瀹㈡埛绔彂閫佹暟鎹傚彂閫佸墠灝嗙煭榪炴帴瀵硅薄璁句負闀胯繛鎺ュ璞$殑灞炴у箋?br /> <br /> 5錛? 闀胯繛鎺ュ鎴風鎺ユ敹鍒版暟鎹悗榪斿洖鍝嶅簲鏁版嵁銆傛湇鍔$浠庨暱榪炴帴瀵硅薄鐨勫睘鎬т腑鍙栧緱鐭繛鎺ュ璞★紝閫氳繃姝ゅ璞″皢鍝嶅簲鏁版嵁鍙戦佺粰鐭繛鎺ュ鎴風銆?br /> <br /> 6錛? 鐭繛鎺ュ鎴風鏀跺埌鍝嶅簲鏁版嵁鍚庯紝鍏抽棴榪炴帴銆?br /> <br /> 3銆佹湇鍔$紼嬪簭<br /> <br /> 3.1闀胯繛鎺ユ湇鍔$<br /> <br /> 鏈嶅姟鍚姩<br /> <br /> <div style="background-color: #eeeeee; font-size: 13px; border-left-color: #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all; "><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><span style="color: #0000FF; ">public</span> <span style="color: #0000FF; ">class</span> MinaLongConnServer {<br /> <br /> <span style="color: #0000FF; ">private</span> <span style="color: #0000FF; ">static</span> <span style="color: #0000FF; ">final</span> <span style="color: #0000FF; ">int</span> PORT = 8002;<br /> <br /> <br /> <br /> <span style="color: #0000FF; ">public</span> <span style="color: #0000FF; ">void</span> start()<span style="color: #0000FF; ">throws</span> IOException{<br /> <br /> IoAcceptor acceptor = <span style="color: #0000FF; ">new</span> NioSocketAcceptor();<br /> <br /> <br /> <br /> acceptor.getFilterChain().addLast("logger", <span style="color: #0000FF; ">new</span> LoggingFilter());<br /> <br /> acceptor.getFilterChain().addLast("codec", newProtocolCodecFilter(<span style="color: #0000FF; ">new</span> TextLineCodecFactory(Charset.forName("UTF-8"))));<br /> <br /> <br /> <br /> acceptor.setHandler(<span style="color: #0000FF; ">new</span> MinaLongConnServerHandler());<br /> <br /> acceptor.getSessionConfig().setReadBufferSize(2048);<br /> <br /> acceptor.bind(<span style="color: #0000FF; ">new</span> InetSocketAddress(PORT));<br /> <br /> System.out.println("Listeningon port " + PORT);<br /> <br /> }<br /> <br /> }<br /> <br /> <span style="color: #008000; ">//</span><span style="color: #008000; ">娑堟伅澶勭悊</span><span style="color: #008000; "><br /> </span><br /> <span style="color: #0000FF; ">public</span> <span style="color: #0000FF; ">class</span> MinaLongConnServerHandler <span style="color: #0000FF; ">extends</span> IoHandlerAdapter {<br /> <br /> <span style="color: #0000FF; ">private</span> <span style="color: #0000FF; ">final</span> Logger logger = (Logger) LoggerFactory.getLogger(getClass());<br /> <br /> <br /> <br /> @Override<br /> <br /> <span style="color: #0000FF; ">public</span> <span style="color: #0000FF; ">void</span> sessionOpened(IoSession session) {<br /> <br /> InetSocketAddress remoteAddress = (InetSocketAddress)session.getRemoteAddress();<br /> <br /> String clientIp = remoteAddress.getAddress().getHostAddress();<br /> <br /> logger.info("LongConnect Server opened Session ID ="+String.valueOf(session.getId()));<br /> <br /> logger.info("鎺ユ敹鏉ヨ嚜瀹㈡埛绔?nbsp;:" + clientIp + "鐨勮繛鎺?");<br /> <br /> Initialization init = Initialization.getInstance();<br /> <br /> HashMap<String, IoSession> clientMap =init.getClientMap();<br /> <br /> clientMap.put(clientIp, session);<br /> <br /> }<br /> <br /> <br /> <br /> @Override<br /> <br /> <span style="color: #0000FF; ">public</span> <span style="color: #0000FF; ">void</span> messageReceived(IoSession session, Object message) {<br /> <br /> logger.info("Messagereceived in the long connect server..");<br /> <br /> String expression = message.toString();<br /> <br /> logger.info("Message is:" + expression);<br /> <br /> IoSession shortConnSession =(IoSession) session.getAttribute("shortConnSession");<br /> <br /> logger.info("ShortConnect Server Session ID ="+String.valueOf(shortConnSession.getId()));<br /> <br /> shortConnSession.write(expression);<br /> <br /> }<br /> <br /> <br /> <br /> @Override<br /> <br /> <span style="color: #0000FF; ">public</span> <span style="color: #0000FF; ">void</span> sessionIdle(IoSession session, IdleStatus status) {<br /> <br /> logger.info("Disconnectingthe idle.");<br /> <br /> <span style="color: #008000; ">//</span><span style="color: #008000; "> disconnect an idle client</span><span style="color: #008000; "><br /> </span><br /> session.close(<span style="color: #0000FF; ">true</span>);<br /> <br /> }<br /> <br /> <br /> <br /> @Override<br /> <br /> <span style="color: #0000FF; ">public</span> <span style="color: #0000FF; ">void</span> exceptionCaught(IoSession session, Throwable cause) {<br /> <br /> <span style="color: #008000; ">//</span><span style="color: #008000; "> close the connection onexceptional situation</span><span style="color: #008000; "><br /> </span><br /> logger.warn(cause.getMessage(), cause);<br /> <br /> session.close(<span style="color: #0000FF; ">true</span>);<br /> <br /> }<br /> <br /> }</div> <br /> 3.2鐭繛鎺ユ湇鍔$<br /> <br /> 鏈嶅姟鍚姩<br /> <br /> <div style="background-color: #eeeeee; font-size: 13px; border-left-color: #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all; "><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><span style="color: #0000FF; ">public</span> <span style="color: #0000FF; ">class</span> MinaShortConnServer {<br /> <br /> <span style="color: #0000FF; ">private</span> <span style="color: #0000FF; ">static</span> <span style="color: #0000FF; ">final</span> <span style="color: #0000FF; ">int</span> PORT = 8001;<br /> <br /> <br /> <br /> <span style="color: #0000FF; ">public</span> <span style="color: #0000FF; ">void</span> start()<span style="color: #0000FF; ">throws</span> IOException{<br /> <br /> IoAcceptor acceptor = <span style="color: #0000FF; ">new</span> NioSocketAcceptor();<br /> <br /> <br /> <br /> acceptor.getFilterChain().addLast("logger", <span style="color: #0000FF; ">new</span> LoggingFilter());<br /> <br /> acceptor.getFilterChain().addLast("codec", newProtocolCodecFilter(<span style="color: #0000FF; ">new</span> TextLineCodecFactory(Charset.forName("UTF-8"))));<br /> <br /> <br /> <br /> acceptor.setHandler(<span style="color: #0000FF; ">new</span> MinaShortConnServerHandler());<br /> <br /> acceptor.getSessionConfig().setReadBufferSize(2048);<br /> <br /> acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 3);<br /> <br /> acceptor.bind(<span style="color: #0000FF; ">new</span> InetSocketAddress(PORT));<br /> <br /> System.out.println("Listeningon port " + PORT);<br /> <br /> }<br /> <br /> }</div> <br /> 娑堟伅澶勭悊<br /> <br /> <div style="background-color: #eeeeee; font-size: 13px; border-left-color: #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all; "><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><span style="color: #0000FF; ">public</span> <span style="color: #0000FF; ">class</span> MinaShortConnServerHandler <span style="color: #0000FF; ">extends</span> IoHandlerAdapter {<br /> <br /> <span style="color: #0000FF; ">private</span> <span style="color: #0000FF; ">final</span> Logger logger = (Logger) LoggerFactory.getLogger(getClass());<br /> <br /> <br /> <br /> @Override<br /> <br /> <span style="color: #0000FF; ">public</span> <span style="color: #0000FF; ">void</span> sessionOpened(IoSession session) {<br /> <br /> InetSocketAddress remoteAddress = (InetSocketAddress)session.getRemoteAddress();<br /> <br /> logger.info(remoteAddress.getAddress().getHostAddress());<br /> <br /> logger.info(String.valueOf(session.getId()));<br /> <br /> }<br /> <br /> <br /> <br /> @Override<br /> <br /> <span style="color: #0000FF; ">public</span> <span style="color: #0000FF; ">void</span> messageReceived(IoSession session, Object message) {<br /> <br /> logger.info("Messagereceived in the short connect server<img src="http://www.tkk7.com/Images/dot.gif" alt="" />");<br /> <br /> String expression = message.toString();<br /> <br /> Initialization init = Initialization.getInstance();<br /> <br /> HashMap<String, IoSession> clientMap =init.getClientMap();<br /> <br /> <span style="color: #0000FF; ">if</span> (clientMap == <span style="color: #0000FF; ">null</span> || clientMap.size() == 0) {<br /> <br /> session.write("error");<br /> <br /> } <span style="color: #0000FF; ">else</span> {<br /> <br /> IoSession longConnSession = <span style="color: #0000FF; ">null</span>;<br /> <br /> Iterator<String> iterator =clientMap.keySet().iterator();<br /> <br /> String key = "";<br /> <br /> <span style="color: #0000FF; ">while</span> (iterator.hasNext()) {<br /> <br /> key = iterator.next();<br /> <br /> longConnSession = clientMap.get(key);<br /> <br /> }<br /> <br /> logger.info("ShortConnect Server Session ID :"+String.valueOf(session.getId()));<br /> <br /> logger.info("LongConnect Server Session ID :"+String.valueOf(longConnSession.getId()));<br /> <br /> longConnSession.setAttribute("shortConnSession",session);<br /> <br /> longConnSession.write(expression);<br /> <br /> }<br /> <br /> }<br /> <br /> <br /> <br /> @Override<br /> <br /> <span style="color: #0000FF; ">public</span> <span style="color: #0000FF; ">void</span> sessionIdle(IoSession session, IdleStatus status) {<br /> <br /> logger.info("Disconnectingthe idle.");<br /> <br /> <span style="color: #008000; ">//</span><span style="color: #008000; "> disconnect an idle client</span><span style="color: #008000; "><br /> </span><br /> session.close(<span style="color: #0000FF; ">true</span>);<br /> <br /> }<br /> <br /> <br /> <br /> @Override<br /> <br /> <span style="color: #0000FF; ">public</span> <span style="color: #0000FF; ">void</span> exceptionCaught(IoSession session, Throwable cause) {<br /> <br /> <span style="color: #008000; ">//</span><span style="color: #008000; "> close the connection onexceptional situation</span><span style="color: #008000; "><br /> </span><br /> logger.warn(cause.getMessage(), cause);<br /> <br /> session.close(<span style="color: #0000FF; ">true</span>);<br /> <br /> }<br /> <br /> }</div> <br /> <br /> <br /> 4銆佸鎴風紼嬪簭<br /> <br /> 4.1闀胯繛鎺ュ鎴風<br /> <br /> 浣跨敤java.net.Socket鏉ュ疄鐜板悜鏈嶅姟绔緩绔嬭繛鎺ャ係ocket寤虹珛鍚庝竴鐩翠繚鎸佽繛鎺ワ紝浠庢湇鍔$鎺ユ敹鍒版暟鎹寘鍚庣洿鎺ュ皢鍘熸枃榪斿洖銆?br /> <br /> <div style="background-color: #eeeeee; font-size: 13px; border-left-color: #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all; "><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><span style="color: #0000FF; ">public</span> <span style="color: #0000FF; ">class</span> TcpKeepAliveClient {<br /> <br /> <span style="color: #0000FF; ">private</span> String ip;<br /> <br /> <span style="color: #0000FF; ">private</span> <span style="color: #0000FF; ">int</span> port;<br /> <br /> <span style="color: #0000FF; ">private</span> <span style="color: #0000FF; ">static</span> Socket socket = <span style="color: #0000FF; ">null</span>;<br /> <br /> <span style="color: #0000FF; ">private</span> <span style="color: #0000FF; ">static</span> <span style="color: #0000FF; ">int</span> timeout = 50 * 1000;<br /> <br /> <br /> <br /> <span style="color: #0000FF; ">public</span> TcpKeepAliveClient(String ip, <span style="color: #0000FF; ">int</span> port) {<br /> <br /> <span style="color: #0000FF; ">this</span>.ip = ip;<br /> <br /> <span style="color: #0000FF; ">this</span>.port = port;<br /> <br /> }<br /> <br /> <br /> <br /> <span style="color: #0000FF; ">public</span> <span style="color: #0000FF; ">void</span> receiveAndSend() <span style="color: #0000FF; ">throws</span> IOException {<br /> <br /> InputStream input = <span style="color: #0000FF; ">null</span>;<br /> <br /> OutputStream output = <span style="color: #0000FF; ">null</span>;<br /> <br /> <br /> <br /> <span style="color: #0000FF; ">try</span> {<br /> <br /> <span style="color: #0000FF; ">if</span> (socket == <span style="color: #0000FF; ">null</span> || socket.isClosed() || !socket.isConnected()) {<br /> <br /> socket = <span style="color: #0000FF; ">new</span> Socket();<br /> <br /> InetSocketAddress addr = <span style="color: #0000FF; ">new</span> InetSocketAddress(ip, port);<br /> <br /> socket.connect(addr, timeout);<br /> <br /> socket.setSoTimeout(timeout);<br /> <br /> System.out.println("TcpKeepAliveClientnew ");<br /> <br /> }<br /> <br /> <br /> <br /> input = socket.getInputStream();<br /> <br /> output = socket.getOutputStream();<br /> <br /> <br /> <br /> <span style="color: #008000; ">//</span><span style="color: #008000; "> read body</span><span style="color: #008000; "><br /> </span><br /> <span style="color: #0000FF; ">byte</span>[] receiveBytes = {};<span style="color: #008000; ">//</span><span style="color: #008000; "> 鏀跺埌鐨勫寘瀛楄妭鏁扮粍</span><span style="color: #008000; "><br /> </span><br /> <span style="color: #0000FF; ">while</span> (<span style="color: #0000FF; ">true</span>) {<br /> <br /> <span style="color: #0000FF; ">if</span> (input.available() > 0) {<br /> <br /> receiveBytes = <span style="color: #0000FF; ">new</span> <span style="color: #0000FF; ">byte</span>[input.available()];<br /> <br /> input.read(receiveBytes);<br /> <br /> <br /> <br /> <span style="color: #008000; ">//</span><span style="color: #008000; "> send</span><span style="color: #008000; "><br /> </span><br /> System.out.println("TcpKeepAliveClientsend date :" + <span style="color: #0000FF; ">new</span> String(receiveBytes));<br /> <br /> output.write(receiveBytes, 0, receiveBytes.length);<br /> <br /> output.flush();<br /> <br /> }<br /> <br /> }<br /> <br /> <br /> <br /> } <span style="color: #0000FF; ">catch</span> (Exception e) {<br /> <br /> e.printStackTrace();<br /> <br /> System.out.println("TcpClientnew socket error");<br /> <br /> }<br /> <br /> }<br /> <br /> <br /> <br /> <span style="color: #0000FF; ">public</span> <span style="color: #0000FF; ">static</span> <span style="color: #0000FF; ">void</span> main(String[] args) <span style="color: #0000FF; ">throws</span> Exception {<br /> <br /> TcpKeepAliveClient client = <span style="color: #0000FF; ">new</span> TcpKeepAliveClient("127.0.0.1", 8002);<br /> <br /> client.receiveAndSend();<br /> <br /> }<br /> <br /> <br /> <br /> }</div> <br /> 4.2鐭繛鎺ュ鎴風<br /> <br /> 鏈嶅姟鍚姩<br /> <br /> <div style="background-color: #eeeeee; font-size: 13px; border-left-color: #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all; "><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><span style="color: #0000FF; ">public</span> <span style="color: #0000FF; ">class</span> MinaShortClient {<br /> <br /> <span style="color: #0000FF; ">private</span> <span style="color: #0000FF; ">static</span> <span style="color: #0000FF; ">final</span> <span style="color: #0000FF; ">int</span> PORT = 8001;<br /> <br /> <br /> <br /> <span style="color: #0000FF; ">public</span> <span style="color: #0000FF; ">static</span> <span style="color: #0000FF; ">void</span> main(String[] args) <span style="color: #0000FF; ">throws</span> IOException,InterruptedException {<br /> <br /> IoConnector connector = <span style="color: #0000FF; ">new</span> NioSocketConnector();<br /> <br /> connector.getSessionConfig().setReadBufferSize(2048);<br /> <br /> <br /> <br /> connector.getFilterChain().addLast("logger", <span style="color: #0000FF; ">new</span> LoggingFilter());<br /> <br /> connector.getFilterChain().addLast("codec", newProtocolCodecFilter(<span style="color: #0000FF; ">new</span> TextLineCodecFactory(Charset.forName("UTF-8"))));<br /> <br /> <br /> <br /> connector.setHandler(<span style="color: #0000FF; ">new</span> MinaShortClientHandler());<br /> <br /> <span style="color: #0000FF; ">for</span> (<span style="color: #0000FF; ">int</span> i = 1; i <= 10; i++) {<br /> <br /> ConnectFuture future = connector.connect(<span style="color: #0000FF; ">new</span> InetSocketAddress("127.0.0.1", PORT));<br /> <br /> future.awaitUninterruptibly();<br /> <br /> IoSession session =future.getSession();<br /> <br /> session.write(i);<br /> <br /> session.getCloseFuture().awaitUninterruptibly();<br /> <br /> <br /> <br /> System.out.println("result=" + session.getAttribute("result"));<br /> <br /> }<br /> <br /> connector.dispose();<br /> <br /> <br /> <br /> }<br /> <br /> }</div> <br /> 娑堟伅澶勭悊<br /> <br /> <div style="background-color: #eeeeee; font-size: 13px; border-left-color: #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all; "><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><span style="color: #0000FF; ">public</span> <span style="color: #0000FF; ">class</span> MinaShortClientHandler <span style="color: #0000FF; ">extends</span> IoHandlerAdapter{<br /> <br /> <span style="color: #0000FF; ">private</span> <span style="color: #0000FF; ">final</span> Logger logger = (Logger) LoggerFactory.getLogger(getClass());<br /> <br /> <br /> <br /> <span style="color: #0000FF; ">public</span> MinaShortClientHandler() {<br /> <br /> <br /> <br /> }<br /> <br /> <br /> <br /> @Override<br /> <br /> <span style="color: #0000FF; ">public</span> <span style="color: #0000FF; ">void</span> sessionOpened(IoSession session) {<br /> <br /> }<br /> <br /> <br /> <br /> @Override<br /> <br /> <span style="color: #0000FF; ">public</span> <span style="color: #0000FF; ">void</span> messageReceived(IoSession session, Object message) {<br /> <br /> logger.info("Messagereceived in the client..");<br /> <br /> logger.info("Message is:" + message.toString());<br /> <br /> session.setAttribute("result", message.toString());<br /> <br /> session.close(<span style="color: #0000FF; ">true</span>);<br /> <br /> }<br /> <br /> <br /> <br /> @Override<br /> <br /> <span style="color: #0000FF; ">public</span> <span style="color: #0000FF; ">void</span> exceptionCaught(IoSession session, Throwable cause) {<br /> <br /> session.close(<span style="color: #0000FF; ">true</span>);<br /> <br /> }<br /> <br /> }</div> <br /> 5銆佹葷粨<br /> <br /> 閫氳繃鏈枃涓殑渚嬪瓙錛孉pache Mina鍦ㄦ湇鍔$鍙疄鐜癟CP鍗忚闀胯繛鎺ュ拰鐭繛鎺ャ傚湪瀹㈡埛绔彧瀹炵幇浜嗙煭榪炴帴妯″紡錛岄暱榪炴帴妯″紡涔熸槸鍙互瀹炵幇鐨勶紙鍦ㄦ湰鏂囦腑榪樻槸閲囩敤浼犵粺鐨刯ava Socket鏂瑰紡錛夈備袱涓湇鍔$涔嬮棿閫氳繃鍏變韓鍐呭瓨鐨勬柟寮忔潵浼犻掕繛鎺ュ璞′篃璁告湁鏇村ソ鐨勫疄鐜版柟寮忋?img src ="http://www.tkk7.com/paulwong/aggbug/399155.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/paulwong/" target="_blank">paulwong</a> 2013-05-11 21:56 <a href="http://www.tkk7.com/paulwong/archive/2013/05/11/399155.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>浣跨敤 Apache MINA 寮鍙戦珮鎬ц兘緗戠粶搴旂敤紼嬪簭[杞琞http://www.tkk7.com/paulwong/archive/2013/05/11/399154.htmlpaulwongpaulwongSat, 11 May 2013 13:41:00 GMThttp://www.tkk7.com/paulwong/archive/2013/05/11/399154.htmlhttp://www.tkk7.com/paulwong/comments/399154.htmlhttp://www.tkk7.com/paulwong/archive/2013/05/11/399154.html#Feedback0http://www.tkk7.com/paulwong/comments/commentRss/399154.htmlhttp://www.tkk7.com/paulwong/services/trackbacks/399154.html Apache MINA(Multipurpose Infrastructure for Network Applications) 鏄?Apache 緇勭粐涓涓緝鏂扮殑欏圭洰錛屽畠涓哄紑鍙戦珮鎬ц兘鍜岄珮鍙敤鎬х殑緗戠粶搴旂敤紼嬪簭鎻愪緵浜嗛潪甯鎬究鍒╃殑妗嗘灦銆傚綋鍓嶅彂琛岀殑 MINA 鐗堟湰鏀寔鍩轟簬 Java NIO 鎶鏈殑 TCP/UDP 搴旂敤紼嬪簭寮鍙戙佷覆鍙i氳紼嬪簭錛堝彧鍦ㄦ渶鏂扮殑棰勮鐗堜腑鎻愪緵錛夛紝MINA 鎵鏀寔鐨勫姛鑳戒篃鍦ㄨ繘涓姝ョ殑鎵╁睍涓?

鐩墠姝e湪浣跨敤 MINA 鐨勮蔣浠跺寘鎷湁錛欰pache Directory Project銆丄syncWeb銆丄MQP錛圓dvanced Message Queuing Protocol錛夈丷ED5 Server錛圡acromedia Flash Media RTMP錛夈丱bjectRADIUS銆丱penfire 絳夌瓑銆?

鏈枃灝嗛氳繃涓涓畝鍗曠殑闂欑▼搴?HelloServer 鏉ヤ粙緇?MINA 鐨勫熀紜鏋舵瀯鐨勫悓鏃舵紨紺哄浣曚嬌鐢∕INA 寮鍙戠綉緇滃簲鐢ㄧ▼搴忋?

鐜鍑嗗

棣栧厛鍒板畼鏂圭綉绔欎笅杞芥渶鏂扮殑 MINA 鐗堟湰錛屽湴鍧鏄細http://mina.apache.org/downloads.html銆備笅杞戒箣鍓嶅厛浠嬬粛涓涓?MINA 鐨勪袱涓増鏈細1.0.x 閫傚悎榪愯鐜涓?JDK1.4錛?.1.x 閫傚悎 JDK1.5 鐨勭増鏈紝涓よ呯殑緙栬瘧鐜閮介渶瑕?JDK1.5銆侸DK1.5 宸茬粡鏄潪甯告櫘閬嶄簡錛屾湰鏂囦腑浣跨敤 1.1.5 鐗堟湰鐨?MINA錛岀紪璇戝拰榪愯鎵闇鐨勬枃浠舵槸 mina-core-1.1.5.jar銆?
涓嬭澆 MINA 鐨勪緷璧栧寘 slf4j銆侻INA 浣跨敤姝ら」鐩綔涓烘棩蹇椾俊鎭殑杈撳嚭錛岃?MINA 鏈韓騫朵笉闄勫甫姝ら」鐩寘錛岃鍒癶ttp://www.slf4j.org/download.html 鍦板潃涓嬭澆 slf4j 鍖咃紝slf4j 欏圭洰瑙e帇鍚庢湁寰堝鐨勬枃浠訛紝鏈緥涓彧闇瑕佸叾涓殑 slf4j-api-1.4.3.jar 鍜?slf4j-simple-1.4.3.jar 榪欎袱涓?jar 鏂囦歡銆傚鏋滄病鏈夎繖涓や釜鏂囦歡灝變細瀵艱嚧鍚姩渚嬪瓙紼嬪簭鐨勬椂鍊欐姤 org/slf4j/LoggerFactory 綾繪病鎵懼埌鐨勯敊璇?
褰撶劧瑕佹眰鏈哄櫒涓婂繀欏昏鏈?1.5 鎴栬呮洿鏂扮増鏈殑 JDK銆?
鏈濂戒綘搴旇閫夋嫨涓涓『鎵嬬殑 Java 寮鍙戠幆澧冧緥濡?Eclipse 鎴栬?NetBeans 涔嬬被鐨勶紝鍙互鏇存柟渚跨殑緙栫爜鍜岃皟璇曪紝铏界劧鎴戜滑鐨勬渶浣庤姹傚彧鏄竴涓畝鍗曠殑鏂囨湰緙栬緫鍣ㄨ屽凡銆?



緙栧啓浠g爜騫舵墽琛?

緙栧啓浠g爜 HelloServer.java 濡備笅

package demo.mina.echo;

import java.io.IOException;
import java.net.InetSocketAddress;

import org.apache.mina.common.*;
import org.apache.mina.transport.socket.nio.*;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;

/**
 * HelloServer婕旂ず紼嬪簭
 * 
@author liudong (
                    
http://www.dlog.cn/javayou
                )
 
*/
public class HelloServer {

    private static final int PORT = 8080;
/**
 * 
@param args
 * 
@throws IOException 
 
*/
public static void main(String[] args) throws IOException {
        IoAcceptor acceptor = new SocketAcceptor();        
        IoAcceptorConfig config = new SocketAcceptorConfig();
        DefaultIoFilterChainBuilder chain = config.getFilterChain();
        //浣跨敤瀛楃涓茬紪鐮?/span>
        chain.addLast("codec", 
new ProtocolCodecFilter(new TextLineCodecFactory()));
        //鍚姩HelloServer
        acceptor.bind(new InetSocketAddress(PORT), new HelloHandler(), config);
        System.out
.println("HelloServer started on port " + 
PORT);
    }
}

/**
 * HelloServer鐨勫鐞嗛昏緫
 * 
@author liudong
 
*/
class HelloHandler extends IoHandlerAdapter {
/**
 * 褰撴湁寮傚父鍙戠敓鏃惰Е鍙?br />  
*/
@Override
    public void exceptionCaught(IoSession ssn, Throwable cause) {
        cause.printStackTrace();
        ssn.close();
    }

/**
 * 鏈夋柊榪炴帴鏃惰Е鍙?br />  
*/
@Override
public void sessionOpened(IoSession ssn) throws Exception {
    System.out.println("session open for " + ssn.getRemoteAddress());
    }

/**
 * 榪炴帴琚叧闂椂瑙﹀彂
 
*/
@Override
public void sessionClosed(IoSession ssn) throws Exception {
    System.out.println("session closed from " + ssn.getRemoteAddress());
    }

/**
 * 鏀跺埌鏉ヨ嚜瀹㈡埛绔殑娑堟伅
 
*/
public void messageReceived(IoSession ssn, Object msg) throws Exception {    
    String ip = ssn.getRemoteAddress().toString();
System.out.println("===> Message From " + ip +" : " + msg);    
    ssn.write("Hello " + msg);
    }
}

緙栬瘧鎵ц
鍏堜笉鐢ㄨ瘯鐫鍘昏鎳傛瘡涓琛屼唬鐮佺殑鍏蜂綋鎰忔濓紝鐢ㄤ綘欏烘墜鐨勭紪璇戝櫒緙栬瘧 HelloServer.java錛屽鏋滄姤閿欒紜鏄惁宸插皢鍓嶉潰鎻愬埌鐨勪笁涓?jar 鏂囦歡娣誨姞鑷崇被璺緞涓傚鏋滀竴鍒囬『鍒╂帴鐫灝卞彲浠ュ惎鍔℉elloServer 紼嬪簭錛屽惎鍔ㄥ悗鎻愮ず錛欻elloServer started on port 8080 琛ㄧず鍚姩鎴愬姛錛屽鏋滃惎鍔ㄥけ璐ワ紝闂鏃犲涔庢槸綾繪病鎵懼埌鎴栬呯鍙e崰鐢ㄣ傚鏋滅鍙h鍗犵敤鐨勮瘽錛屾崲涓涓綏錛屼慨鏀?PORT 甯擱噺鍊煎悗鍐嶆緙栬瘧騫跺惎鍔ㄣ?

嫻嬭瘯鏈嶅姟鍣?
鎵撳紑鍛戒護琛岀獥鍙o紝杈撳叆 telnet localhost 8080 鍚庯紝杈撳叆鎮ㄧ殑鑻辨枃鍚嶆垨鑰呭叾浠栦竴浜涗貢涓冨叓緋熺殑瀛楃鍚庡洖杞﹀啀鍘葷湅鐪嬪垰鍚姩鐨勬湇鍔$▼搴忔湁浣曞弽搴斻傛垜鐨勫弽搴斿涓嬶細

HelloServer started on port 8080
session open for /127.0.0.1:3023
===> Message From /127.0.0.1:3023 :hello
===> Message From /127.0.0.1:3023 :hello
===> Message From /127.0.0.1:3023 :liudong
===> Message From /127.0.0.1:3023 :Winter Lau



濂戒簡錛屼竴鍒囨甯革紝鎭枩浣犵殑絎竴涓嬌鐢?MINA 寮鍙戠殑緗戠粶紼嬪簭宸茬粡鎴愬姛榪愯浜嗐?




MINA 鍩烘湰綾葷殑鎻忚堪

鍦ㄤ粙緇嶆灦鏋勪箣鍓嶅厛璁よ瘑鍑犱釜鎺ュ彛錛?

IoAccepter 鐩稿綋浜庣綉緇滃簲鐢ㄧ▼搴忎腑鐨勬湇鍔″櫒绔?

IoConnector 鐩稿綋浜庡鎴風

IoSession 褰撳墠瀹㈡埛绔埌鏈嶅姟鍣ㄧ鐨勪竴涓繛鎺ュ疄渚?

IoHandler 涓氬姟澶勭悊閫昏緫

IoFilter 榪囨護鍣ㄧ敤浜庢偓鎺ラ氳灞傛帴鍙d笌涓氬姟灞傛帴鍙?






MINA 鐨勫熀紜鏋舵瀯

涓嬪浘鏄?MINA 鐨勬灦鏋勫浘錛?


鍥?1錛歁INA 鐨勬灦鏋勫浘


鍦ㄥ浘涓殑妯″潡閾句腑錛孖oService 渚挎槸搴旂敤紼嬪簭鐨勫叆鍙o紝鐩稿綋浜庢垜浠墠闈唬鐮佷腑鐨?IoAccepter錛孖oAccepter 渚挎槸 IoService 鐨勪竴涓墿灞曟帴鍙c侷oService 鎺ュ彛鍙互鐢ㄦ潵娣誨姞澶氫釜 IoFilter錛岃繖浜?IoFilter 絎﹀悎璐d換閾炬ā寮忓茍鐢?IoProcessor 綰跨▼璐熻矗璋冪敤銆傝?IoAccepter 鍦?ioService 鎺ュ彛鐨勫熀紜涓婅繕鎻愪緵緇戝畾鏌愪釜閫氳绔彛浠ュ強鍙栨秷緇戝畾鐨勬帴鍙c傚湪涓婇潰鐨勪緥瀛愪腑錛屾垜浠槸榪欐牱浣跨敤 IoAccepter 鐨勶細

IoAcceptor acceptor = new SocketAcceptor();



鐩稿綋浜庢垜浠嬌鐢ㄤ簡 Socket 閫氳鏂瑰紡浣滀負鏈嶅姟鐨勬帴鍏ワ紝褰撳墠鐗堟湰鐨?MINA 榪樻彁渚涗簡闄?SocketAccepter 澶栫殑鍩轟簬鏁版嵁鎶ユ枃閫氳鐨?DatagramAccepter 浠ュ強鍩轟簬綆¢亾閫氳鐨?VmPipeAccepter銆傚彟澶栬繕鍖呮嫭涓插彛閫氳鎺ュ叆鏂瑰紡錛岀洰鍓嶅熀浜庝覆鍙i氳鐨勬帴鍏ユ柟寮忓凡緇忓湪鏈鏂版祴璇曠増鐨?MINA 涓彁渚涖備綘涔熷彲浠ヨ嚜琛屽疄鐜?IoService 鎺ュ彛鏉ヤ嬌鐢ㄨ嚜宸辯殑閫氳鏂瑰紡銆?

鑰屽湪涓婂浘涓渶鍙崇涔熷氨鏄?IoHandler錛岃繖渚挎槸涓氬姟澶勭悊妯″潡銆傜浉褰撲簬鍓嶉潰渚嬪瓙涓殑 HelloHandler 綾匯傚湪涓氬姟澶勭悊綾諱腑涓嶉渶瑕佸幓鍏沖績瀹為檯鐨勯氳緇嗚妭錛屽彧綆″鐞嗗鎴風浼犺緭榪囨潵鐨勪俊鎭嵆鍙傜紪鍐?Handler 綾誨氨鏄嬌鐢?MINA 寮鍙戠綉緇滃簲鐢ㄧ▼搴忕殑閲嶅績鎵鍦紝鐩稿綋浜?MINA 宸茬粡甯綘澶勭悊浜嗘墍鏈夌殑閫氳鏂歸潰鐨勭粏鑺傞棶棰樸備負浜嗙畝鍖?Handler 綾伙紝MINA 鎻愪緵浜?IoHandlerAdapter 綾伙紝姝ょ被浠呬粎鏄疄鐜頒簡 IoHandler 鎺ュ彛錛屼絾騫朵笉鍋氫換浣曞鐞嗐?

涓涓?IoHandler 鎺ュ彛涓叿鏈夊涓嬩竴浜涙柟娉曪紙鎽樿嚜 MINA 鐨?API 鏂囨。錛夛細

void exceptionCaught(IoSession session, Throwable cause)
褰撴帴鍙d腑鍏朵粬鏂規硶鎶涘嚭寮傚父鏈鎹曡幏鏃惰Е鍙戞鏂規硶
void messageReceived(IoSession session, Object message)
褰撴帴鏀跺埌瀹㈡埛绔殑璇鋒眰淇℃伅鍚庤Е鍙戞鏂規硶.
void messageSent(IoSession session, Object message)
褰撲俊鎭凡緇忎紶閫佺粰瀹㈡埛绔悗瑙﹀彂姝ゆ柟娉?
void sessionClosed(IoSession session)
褰撹繛鎺ヨ鍏抽棴鏃惰Е鍙戯紝渚嬪瀹㈡埛绔▼搴忔剰澶栭鍑虹瓑絳?
void sessionCreated(IoSession session)
褰撲竴涓柊瀹㈡埛绔繛鎺ュ悗瑙﹀彂姝ゆ柟娉?
void sessionIdle(IoSession session, IdleStatus status)
褰撹繛鎺ョ┖闂叉椂瑙﹀彂姝ゆ柟娉?
void sessionOpened(IoSession session)
褰撹繛鎺ュ悗鎵撳紑鏃惰Е鍙戞鏂規硶錛屼竴鑸鏂規硶涓?sessionCreated 浼氳鍚屾椂瑙﹀彂


鍓嶉潰鎴戜滑鎻愬埌 IoService 鏄礋璐e簳灞傞氳鎺ュ叆錛岃?IoHandler 鏄礋璐d笟鍔″鐞嗙殑銆傞偅涔?MINA 鏋舵瀯鍥句腑鐨?IoFilter 浣滀綍鐢ㄩ斿憿錛熺瓟妗堟槸浣犳兂浣滀綍鐢ㄩ旈兘鍙互銆備絾鏄湁涓涓敤閫斿嵈鏄繀欏葷殑錛岄偅灝辨槸浣滀負 IoService 鍜?IoHandler 涔嬮棿鐨勬ˉ姊併侷oHandler 鎺ュ彛涓渶閲嶈鐨勪竴涓柟娉曟槸 messageReceived錛岃繖涓柟娉曠殑絎簩涓弬鏁版槸涓涓?Object 鍨嬬殑娑堟伅錛屾繪墍鍛ㄧ煡錛孫bject 鏄墍鏈?Java 瀵硅薄鐨勫熀紜錛岄偅鍒板簳璋佹潵鍐沖畾榪欎釜娑堟伅鍒板簳鏄粈涔堢被鍨嬪憿錛熺瓟妗堜篃灝卞湪榪欎釜 IoFilter 涓傚湪鍓嶉潰浣跨敤鐨勪緥瀛愪腑錛屾垜浠坊鍔犱簡涓涓?IoFilter 鏄?new ProtocolCodecFilter(new TextLineCodecFactory())錛岃繖涓繃婊ゅ櫒鐨勪綔鐢ㄦ槸灝嗘潵鑷鎴風杈撳叆鐨勪俊鎭漿鎹㈡垚涓琛岃鐨勬枃鏈悗浼犻掔粰 IoHandler錛屽洜姝ゆ垜浠彲浠ュ湪 messageReceived 涓洿鎺ュ皢 msg 瀵硅薄寮哄埗杞崲鎴?String 瀵硅薄銆?

鑰屽鏋滄垜浠笉鎻愪緵浠諱綍榪囨護鍣ㄧ殑璇濓紝閭d箞鍦?messageReceived 鏂規硶涓殑絎簩涓弬鏁扮被鍨嬪氨鏄竴涓?byte 鐨勭紦鍐插尯錛屽搴旂殑綾繪槸 org.apache.mina.common.ByteBuffer銆傝櫧鐒朵綘涔熷彲浠ュ皢瑙f瀽瀹㈡埛绔俊鎭斁鍦?IoHandler 涓潵鍋氾紝浣嗚繖騫朵笉鏄帹鑽愮殑鍋氭硶錛屼嬌鍘熸潵娓呮櫚鐨勬ā鍨嬪張妯$硦璧鋒潵錛屽彉寰?IoHandler 涓嶅彧鏄笟鍔″鐞嗭紝榪樺緱鍏呭綋鍗忚瑙f瀽鐨勪換鍔°?

MINA鑷韓甯︽湁涓浜涘父鐢ㄧ殑榪囨護鍣紝渚嬪LoggingFilter錛堟棩蹇楄褰曪級銆丅lackListFilter錛堥粦鍚嶅崟榪囨護錛夈丆ompressionFilter錛堝帇緙╋級銆丼SLFilter錛圫SL鍔犲瘑錛夌瓑銆?



鍏朵粬

MINA 涓嶄粎浠呮槸鐢ㄦ潵寮鍙戠綉緇滄湇鍔″櫒绔簲鐢ㄧ▼搴忥紝瀹冧竴鏍峰彲浠ヤ嬌鐢?IoConnector 鏉ヨ繛鎺ュ埌鍚勭鍚勬牱鐨勭綉緇滄湇鍔$▼搴忋?

閫氳繃鏈枃涓?HelloServer 榪欎釜渚嬪瓙錛屾垜浠湪鎯婂徆 MINA 鍙互甯︽潵澶氫箞澶т究鍒╃殑鍚屾椂錛岃繕涓嶅緱涓嶄負鍏跺崜瓚婄殑鎬ц兘鑰岄獎鍌詫紝鎹О浣跨敤MINA寮鍙戞湇鍔″櫒紼嬪簭鐨勬ц兘宸茬粡閫艱繎浣跨敤 C/C++ 璇█寮鍙戠殑緗戠粶鏈嶅姟銆備綔涓?MINA 鐨勫叆闂ㄦ枃绔狅紝鎬ц兘闂涓嶅湪鏈枃璁ㄨ鑼冨洿鍐呫?

鍙﹀鍦?MINA 鍘嬬緝鍖呬腑闄勫甫鏈変笉灝戞瘮 HelloServer 瑕佸ソ寰楀鐨勪緥瀛愶紝閫氳繃榪欎簺渚嬪瓙鍙互榪涗竴姝ョ殑浜嗚В騫舵帉鎻?MINA銆?




鍙傝冭祫鏂?

http://mina.apache.org MINA 瀹樻柟緗戠珯


http://mina.apache.org/features.html 鎮ㄥ彲浠ュ湪榪欓噷鏌ョ湅鍏充簬 MINA 鐨勬洿澶氱壒鎬?


http://mina.apache.org/testimonials.html 鐪嬬湅鍒漢鏄浣曡瘎浠?MINA 鐨?http://asyncweb.safehaus.org/浣跨敤 MINA 寮鍙戠殑楂樻ц兘 WEB 鏈嶅姟鍣?nbsp;


paulwong 2013-05-11 21:41 鍙戣〃璇勮
]]>
主站蜘蛛池模板: 69式互添免费视频| 免费A级毛片无码A∨免费| 一个人免费高清在线观看| 无码天堂va亚洲va在线va| 亚洲午夜激情视频| 亚洲高清最新av网站| jizz中国免费| 色噜噜亚洲男人的天堂| 亚洲国产精久久久久久久| 国产精品无码一二区免费| h视频免费高清在线观看| 成人免费视频小说| 69av免费视频| 精品国产精品久久一区免费式| h片在线免费观看| 亚洲av永久无码精品漫画| 亚洲国产高清在线一区二区三区| 亚洲精品国产高清嫩草影院| 亚洲国产精品无码久久久不卡| 亚洲av高清在线观看一区二区| 久热免费在线视频| 国产午夜精品理论片免费观看| 午夜在线免费视频| 三年在线观看免费观看完整版中文 | 久久九九免费高清视频| 亚洲娇小性色xxxx| 久九九精品免费视频| 成人免费在线观看网站| 亚洲国产精品久久丫| 亚洲日本中文字幕天天更新| 中文日本免费高清| 免费观看国产精品| 国产亚洲色婷婷久久99精品| 亚洲网站在线播放| 色哟哟国产精品免费观看| 免费看香港一级毛片| 免费在线观看自拍性爱视频| 怡红院免费全部视频在线视频| 69视频免费在线观看| 亚洲人成图片小说网站| 亚洲AV无码国产精品色|