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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

MINA2-TCP服务端实例

發布時間:2025/3/21 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MINA2-TCP服务端实例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

為什么80%的碼農都做不了架構師?>>> ??

本教程將引導創建一個基于MINA的程序實例,例子是一個時間服務器。

編寫MINA時間服務器

以創建一個名為MinaTimeServer.java的源文件開始,初始代碼如下:

public class MinaTimeServer{public static void main(String[] args){// code will go here next} }

?這段代碼對于所有人來說應該都是很明了的了,我們簡單的定義了一個main方法用來啟動這個程序,這時,我們就開始添加代碼來構造我們的服務器。第一步,我們需要創建一個對象用來監聽所有接入的連接。因為這個程序是基于TCP/UDP的,我們將添加一個SocketAcceptor在我們的程序中。

import org.apache.mina.transport.socket.nio.NioSocketAcceptor; public class MinaTimeServer{public static void main( String[] args ){IoAcceptor acceptor =new NioSocketAcceptor();} }

在類NioSocketAcceptor被創建之后,我們就可以繼續定義一個處理程序類,并將這個NioSocketAcceptor綁定到一個端口上:

import java.net.InetSocketAddress; import org.apache.mina.core.service.IoAcceptor; import org.apache.mina.transport.socket.nio.NioSocketAcceptor;public class MinaTimeServer{private static final int PORT =9123;public static void main( String[] args )throws IOException{IoAcceptor acceptor =new NioSocketAcceptor();acceptor.bind(new InetSocketAddress(PORT)); ???????????} }

?如你所見,這里有一個方法調用acceptor.bind(?new?InetSocketAddress(PORT)?),這個方法定義了這個服務將要監聽的主機和端口,并開始接收傳入的連接。

? ? ? ?接下來,我們添加一個過濾器的配置,這個過濾器將記錄所有的日志信息,如新創建了會話,接收消息,發送消息和會話關閉等。下一個過濾器是協議編解碼過濾器ProtocolCodecFilter,這個過濾器可以將二進制文件或協議特定數據轉換為消息對象,或進行反向轉換。這里,我們使用了一個已存在的文本行轉換工廠,它可以替你處理基于文本的消息轉換(你不需要自己實現這個):

import java.io.IOException; import java.net.InetSocketAddress; import java.nio.charset.Charset; import org.apache.mina.core.service.IoAcceptor; import org.apache.mina.filter.codec.ProtocolCodecFilter; import org.apache.mina.filter.codec.textline.TextLineCodecFactory; import org.apache.mina.filter.logging.LoggingFilter; import org.apache.mina.transport.socket.nio.NioSocketAcceptor;public class MinaTimeServer{ ???????????public static void main( String[] args ){IoAcceptor acceptor =new NioSocketAcceptor();acceptor.getFilterChain().addLast("logger",new LoggingFilter());acceptor.getFilterChain().addLast("codec",new ProtocolCodecFilter(new TextLineCodecFactory( Charset.forName("UTF-8"))));acceptor.bind(new InetSocketAddress(PORT));} }

接下來,我們將定義可同時為來自不同客戶端的請求進行服務的處理程序,處理程序類必須實現IoHandler接口。對于大多數基于MINA程序來說,這是程序的核心部分,它將實際處理所有來自客戶端的請求。在本教程中,我們將通過繼承類IoHandlerAdapter來實現。這個類采用了適配器模式,這極大的簡少了滿足不同需求所需的代碼量,它本身實現了IoHandler接口。

import java.net.InetSocketAddress; import java.nio.charset.Charset; import org.apache.mina.core.service.IoAcceptor; import org.apache.mina.filter.codec.ProtocolCodecFilter; import org.apache.mina.filter.codec.textline.TextLineCodecFactory; import org.apache.mina.filter.logging.LoggingFilter; import org.apache.mina.transport.socket.nio.NioSocketAcceptor;public class MinaTimeServer{public static void main( String[] args )throws IOException{IoAcceptor acceptor =new NioSocketAcceptor();acceptor.getFilterChain().addLast("logger",new LoggingFilter());acceptor.getFilterChain().addLast("codec",new ProtocolCodecFilter(new TextLineCodecFactory( Charset.forName("UTF-8"))));acceptor.setHandler(new TimeServerHandler());acceptor.bind(new InetSocketAddress(PORT)); ???????????} }

接下來開始添加一些NioSocketAcceptor的配置,這些配置允許我們對從客戶端接入的socket進行一些特殊設置。

import java.net.InetSocketAddress; import java.nio.charset.Charset; import org.apache.mina.core.session.IdleStatus; import org.apache.mina.core.service.IoAcceptor; import org.apache.mina.filter.codec.ProtocolCodecFilter; import org.apache.mina.filter.codec.textline.TextLineCodecFactory; import org.apache.mina.filter.logging.LoggingFilter; import org.apache.mina.transport.socket.nio.NioSocketAcceptor;public class MinaTimeServer{ ???????????public static void main( String[] args )throws IOException{IoAcceptor acceptor =new NioSocketAcceptor();acceptor.getFilterChain().addLast("logger",new LoggingFilter());acceptor.getFilterChain().addLast("codec",new ProtocolCodecFilter(new TextLineCodecFactory( Charset.forName("UTF-8"))));acceptor.setHandler(new TimeServerHandler());acceptor.getSessionConfig().setReadBufferSize(2048);acceptor.getSessionConfig().setIdleTime( IdleStatus.BOTH_IDLE,10);acceptor.bind(new InetSocketAddress(PORT));} }

類MinaTimeServer中加入了兩行新的代碼,這些方法用來設置IoHandler的配置,如讀取緩沖器大小和session的空閑時間屬性。設置緩沖器的大小用來告訴底層操作系統在為傳入的數據分配空間時,每次分配的大小。第二行的用來設置多久檢查一次空閑session,其中,第一個參數定義了用什么策略來檢查一個會話是否空閑,第二個參數定義了一個session閑置了多少秒時進行一次檢查。

? ? ? 處理程序的代碼如下:

import java.util.Date;importorg.apache.mina.core.session.IdleStatus; import org.apache.mina.core.service.IoHandlerAdapter; import org.apache.mina.core.session.IoSession;public class TimeServerHandler extends IoHandlerAdapter {@Overridepublic void exceptionCaught( IoSession session, Throwable cause )throws Exception{cause.printStackTrace();}@Overridepublic void messageReceived( IoSession session, Object message )throws Exception{String str = message.toString();if(str.trim().equalsIgnoreCase("quit")){session.close();return;}Date date =new Date();session.write( date.toString());System.out.println("Message written...");}@Overridepublic void sessionIdle( IoSession session, IdleStatus status )throws Exception{System.out.println("IDLE "+ session.getIdleCount( status ));} }

?在這個類中使用了的方法有:exceptionCaught,messageReceived和sessionIdle。

? ? ? ?在一個處理程序中,exceptionCaught應該總是被定義為捕捉在正常處理遠程連接時候拋出的異常,如果不定義這個方法,異常發生時可能不會正確的被通知。

? ? ? ?本例中的exceptionCaught方法只是簡單的打印出堆棧跟蹤的錯誤信息并將該session關閉,多數情況下,這是個標準的做法,除非處理程序可以做到從異常中恢復。

? ? ? ?例子中的messageReceived方法將接收客戶端數據進行處理并立刻返回給客戶端數據。如果從客戶端接收到單詞“quit”,則會關閉該session,該方法依然會在客戶端打印出系統當前時間。借助于所使用的協議編碼解碼器,該方法傳遞的對象(方法中的第二個參數Object message)和原來的相比會有所變化,同樣,使用session.write(Object)方法進行傳遞的對象也會是不同的。如果不指定一個協議編解碼器,你接收到的將很有可能是一個IoBuffer對象,同時,你也必須返回一個IoBuffer對象。

sessionIdle方法會在一個session閑置了acceptor.getSessionConfig().setIdleTime(?IdleStatus.BOTH_IDLE,?10?)中定義的時間后被調用。

? ? ? 最后要做的是定義服務器要監聽的socket地址,并通過調用主方法啟動服務器,該代碼如下所示:

import java.io.IOException; import java.net.InetSocketAddress; import java.nio.charset.Charset; import org.apache.mina.core.service.IoAcceptor; import org.apache.mina.core.session.IdleStatus; import org.apache.mina.filter.codec.ProtocolCodecFilter; import org.apache.mina.filter.codec.textline.TextLineCodecFactory; import org.apache.mina.filter.logging.LoggingFilter; import org.apache.mina.transport.socket.nio.NioSocketAcceptor;public class MinaTimeServer{private static final int PORT =9123;public static void main( String[] args )throws IOException{IoAcceptor acceptor =new NioSocketAcceptor();acceptor.getFilterChain().addLast("logger",new LoggingFilter());acceptor.getFilterChain().addLast("codec",new ProtocolCodecFilter(new TextLineCodecFactory( Charset.forName("UTF-8"))));acceptor.setHandler(new TimeServerHandler());acceptor.getSessionConfig().setReadBufferSize(2048);acceptor.getSessionConfig().setIdleTime( IdleStatus.BOTH_IDLE,10);acceptor.bind(new InetSocketAddress(PORT)); ???????????} }

試用該時間服務器:

這時,我們就可以繼續進行編譯操作,一旦編譯過該程序,就可以執行改程序并測試會發生什么。最簡單的測試該服務器的方法是啟動該程序,并通過telnet測試改程序

Client OutputServer Output
user@myhost:~> telnet 127.0.0.1 9123?
Trying 127.0.0.1...?
Connected to 127.0.0.1.?
Escape character is '^]'.?
hello?
Wed Oct 17 23:23:36 EDT 2007?
quit?
Connection closed by foreign host.?
user@myhost:~>
MINA Time server started.?
Message written...

轉載于:https://my.oschina.net/shajin/blog/823985

總結

以上是生活随笔為你收集整理的MINA2-TCP服务端实例的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 久久午夜电影 | 浮力影院国产第一页 | 久久久久久免费观看 | 尤物网站在线播放 | 香蕉久久国产av一区二区 | 69视频在线播放 | 91猎奇在线观看 | 日本a级片视频 | 日韩一区二区在线观看 | 五月婷婷视频在线 | 伊人av影院 | 色狠狠一区二区 | 中文黄色片 | 国产va亚洲va在线va | 国产91熟女高潮一区二区 | 国产成人精品视频在线观看 | 偷拍欧美另类 | 91精品91久久久中77777 | av自拍偷拍 | 黄色xxx| 91国产在线免费观看 | 大波大乳videos巨大 | 成人免费观看a | 成人国产精品久久久网站 | 黑丝少妇喷水 | 99国产精品白浆在线观看免费 | 韩产日产国产欧产 | 亚洲无码久久久久久久 | 国产精品伦一区二区三区免费看 | 97神马影院| 亚洲一区二区电影 | 国产女人高潮的av毛片 | 国产日韩欧美视频在线 | 久久阁| 欧洲成人综合 | 色黄网站在线观看 | 久久视频在线看 | 久久亚洲国产 | 在线看不卡av | 香港日本韩国三级网站 | 处女朱莉 | 麻豆精品91 | 美女户外露出 | 毛片www| 久久综合社区 | 日韩极品在线 | 双性娇喘浑圆奶水h男男漫画 | 特级西西444www大精品视频 | 国产偷拍一区二区三区 | 蜜桃综合| 成年人在线免费观看网站 | 精品国产91乱码一区二区三区 | 精东影业一区二区三区 | 500福利视频导航 | 天天摸天天舔 | 奇米在线777 | 一级欧美视频 | 99国产精品99久久久久久 | 亚洲美女视频在线观看 | 日本高清在线一区 | 亚洲精品18p | 亚洲欧美日本一区二区三区 | 激情播播网 | 国产777| 国产第四页 | 五十路母| 亚洲人成一区 | 亚洲av日韩av不卡在线观看 | 91狠狠干| 91网站免费在线观看 | 深爱婷婷 | 国产精品福利视频 | 久久综合伊人77777麻豆最新章节 | 污网站在线免费 | 91黄视频在线观看 | 亚欧洲精品在线视频免费观看 | 久久发布国产伦子伦精品 | 91色在线播放 | 国产精品色网 | www.一级片| 黑人干亚洲女 | www.白丝 | 亚洲免费观看高清 | 都市激情自拍偷拍 | av网址在线看 | 国产精品爱啪在线线免费观看 | 国产成人精品一区二区在线小狼 | 国产视频不卡一区 | 在线观看国产精品入口男同 | 九热在线 | 1024国产视频 | 无码人妻丰满熟妇啪啪欧美 | 在线欧美一区二区 | 日韩和一区二区 | 美日韩丰满少妇在线观看 | 蜜桃视频久久一区免费观看入口 | 污免费视频 | 天天爽夜夜爽夜夜爽精品 | 亚洲永久精品国产 |