ImageVerifierCode 换一换
格式:DOCX , 页数:13 ,大小:63.17KB ,
资源ID:17372228      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/17372228.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(附6Apache Mina应用Word下载.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

附6Apache Mina应用Word下载.docx

1、 Mina能干什么?先拉出来溜一下:我们用它做两个小程序,一个为服务器,收到客户机的消息后,就回送给客户机;一个是简单的客户机,一连上服务器,就发一条消息报到,然后将从服务器接到的消息再发给服务器。嗯,你是否意识到这是一个死循环的C/S通信?折腾机器这叫,编程就是要先能折腾! 第一步:当然是下载Mina,然后在ec里建个项目,将下载后的mina-core-2.0.0-M1.jar 这个包加到你的新建的Project的lib中。第二步,编写服务器代码:服务器端由两个类组成,一个是Min.java,启动服务器的主类;另一个是SamplMinaServerHandler.java,这个类负责处理连结

2、上来的客户机,即消息处理器。看代码了:处理器代码:SamplMinaServerHandler.javapackage com.javake.mina.sampleserver;import mon.IoHandlerAdapter;import mon.IoSession;/* * 自定议的消息处理器,必须实现IoHandlerAdapter类 * author javaFound * 蓝杰 */public class SamplMinaServerHandler extends IoHandlerAdapter /当一个客端端连结进入时 Override public void sess

3、ionOpened(IoSession session) throws Exception System.out.println(incomming client : +session.getRemoteAddress(); /当一个客户端关闭时 public void sessionClosed(IoSession session) System.out.println(one Clinet Disconnect !); /当客户端发送的消息到达时: public void messageReceived(IoSession session, Object message) throws E

4、xception /我们己设定了服务器解析消息的规则是一行一行读取,这里就可转为String: String s=(String)message; / Write the received data back to remote peer收到客户机发来的消息:+s); /测试将消息回送给客户端 session.write(s+count); count+; private int count=0; 处理器是是我们重写了mon.IoHandlerAdapter的一个类,其中被重写的方法,你根据方法名应可以想到这些方法的用途吧?!编程还有一点很重要,就是要会连猜带蒙。启动服务器的主类:MainSe

5、rver.javaimport .InetSocketAddress;import mon.DefaultIoFilterChainBuilder;import org.apache.mina.filter.codec.ProtocolCodecFilter;import org.apache.mina.filter.codec.textline.TextLineCodecFactory;import org.apache.mina.transport.socket.SocketAcceptor;import org.apache.mina.transport.socket.nio.NioSo

6、cketAcceptor; * 简单Mina Server示例public class MainServer public static void main(String args) throws Exception /创建一个非阻塞的Server端Socket,用NIO SocketAcceptor acceptor = new NioSocketAcceptor(); /创建接收数据的过滤器 DefaultIoFilterChainBuilder chain = acceptor.getFilterChain(); /设定这个过滤器将一行一行(/r/n)的读取数据 chain.addLas

7、t(myChin, new ProtocolCodecFilter(new TextLineCodecFactory(); /设定服务器端的消息处理器:一个SamplMinaServerHandler对象, acceptor.setHandler(new SamplMinaServerHandler(); / 服务器端绑定的端口 int bindPort=9988; /绑定端口,启动服务器 acceptor.bind(new InetSocketAddress(bindPort);Mina Server is Listing on:= + bindPort); 就这么简单!启动服务器,试一下!

8、不幸的是,输出的是如下的一行异常信息:Exception in thread main java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory at mon.SimpleIoProcessorPool.(SimpleIoProcessorPool.java:78) at mon.SimpleIoProcessorPool.90) at mon.AbstractPollingIoConnector.(AbstractPollingIoConnector.java:61) at org.apache.mina.transport.socket

9、.nio.NioSocketConnector.(NioSocketConnector.java:52) at com.javake.mina.sampleclient.Main.main(Main.java:13) 意思是org.slf4j.LoggerFactory 这个类找不到?怎么办?google啊!slf4j也是一个开源的项目,专用做日志记录,到http:/www.slf4j.org/ 上面去下载后,将log4j-over-slf4j-1.5.0.jar、和slf4j-nop-1.5.0.jar这两个jsr包加到项目中,再运行!如果还报错,那烦请你告诉我,我再去google! 如果运

10、行成功,就进行下一步吧:第三步:测试服务器: 非要编写客户端代码才能测试吗?N!,启动服务器,我们使用命令行的Telnet测试: 现在你只要按一下回车,命令行的telnet就会做为一个client连上我们编写的服务器: 如果能像上图那样收发消息,(不要忘了,在命令行输入消息后要qiao回车,消息才会发送到服务器),就证明你的服务器编写成功了! 为什么输入消息后要qiao回车?你忘了我们程序中这一句了吧:/设定这个过滤器将一行一行(/r/n)的读取数据 总是用telnet不行吧,用Mina编写客户机,跟服务器是一样的简单!go on! 就不废话了,还是两个类,一个启动主类,一个消息处理器:启动主

11、类:MainClient.javaimport mon.ConnectFuture;import org.apache.mina.transport.socket.nio.NioSocketConnector; * 简单Mina Client示例 */ public class MainClient / Create TCP/IP connector. NioSocketConnector connector = new NioSocketConnector(); / 创建接收数据的过滤器 DefaultIoFilterChainBuilder chain = connector.getFil

12、terChain(); connector.setHandler(new SamplMinaClientHandler(); / Set connect timeout. connector.setConnectTimeout(30); /连结到服务器: ConnectFuture cf = connector.connect(new InetSocketAddress(localhost, 9988); / Wait for the connection attempt to be finished. cf.awaitUninterruptibly(); cf.getSession().ge

13、tCloseFuture().awaitUninterruptibly(); connector.dispose();消息处理器类:SamplMinaClientHandler.javapackage com.javake.mina.sampleclient; * Mina Client 接收消息的处理器public class SamplMinaClientHandler extends IoHandlerAdapter /当一个客端端连结进入时 Override public void sessionOpened(IoSession session) throws Exception se

14、ssion.write(我来啦. /当一个客户端关闭时 public void sessionClosed(IoSession session) System.out.println( /当客户端发送的消息到达时: public void messageReceived(IoSession session, Object message) throws Exception /我们己设定了服务器解析消息的规则是一行一行读取,这里就可转为String: String s=(String)message; / Write the received data back to remote peer服务

15、器发来的收到消息: /测试将消息回送给客户端 session.write(s); 编写完成,启动服务器,再启动客户机,让你的机器狂奔吧! 所谓总结,是我们这两个程序中用到了Mina包中的几个API,我们分析其用途而己,其实这个总结应该你自己查看Mina的文档来完成: 还是简单的说下我们用到的几个关键API:NioSocketAcceptor: 这是创建非阻塞服务器端的类,类似与java中的ServerSocket,非阻塞I/O,是java5里提供的一组新的API,意思是我们的服务器不用像以前那样调用accept()方法,阻塞等待了。NioSocketConnector:功能似于jdk中的Soc

16、ket类,当然,也是非阻塞的读取数据!DefaultIoFilterChainBuilder:对接收到的数据进行过滤的创建器,用以设定通信时的协议,在本例中,程序规则是一行数据就是一条消息,通过: 来设定IoHandlerAdapter:这是一个抽像类,专门用来让我们重写以处理程序接收到的消息的,并处理通信中的连结,断开,消息到达等事件。客户机和服务器端创建后,都有一个setHandler方法,就是要传入我们重写了这个类的对象。 其中各个方法在通信中会根据情况自动调用,类似与Swing事件中的调用机制。IoHandlerAdapter实现类中最重要的一个方法是:/当客户端发送的消息到达时: 这

17、个方法传进来两个参数,第一个,代表了与对方机器的Tcp/IP连结,第二个,代表了接收到的数据,为什么定义为Object型?为了你灵活使用啊,怎个灵活法?看我们后面的Demo! 开发一个Mina应用,简单的说,就是创建连结,设定过滤规则,编写自己的消息处理器这三步!比我们直接用Socket/ServerSocket思路清晰得多了吧。 还不够清楚?那我就画个Mina结构图给你看,看你看得懂不? 这只是Mina小试,如果你以为Mina只有这点用处,你就太没有探索精神了!总结就这么些,去看Mina doc,比这详细得多! 还要我帮你再探索下,什么安全通信,日志记录,图片传送,UDP消息?OK,再教一招

18、使用Mina直接传送对象: 不要以为直接传送对象是RMI的专利,在Mina中变得更容易,我就长话短说,不堆代码了,当然,关键的代码还是会给出: 第一步:编写序列化对象类,你当然要写一个被传送对象的类,在服务器端和客户机端公用。这不是废话,要记住的关键是这个类必须这样:public class Userinfo implements java.io.Serializable . . . 第二步:设定过滤器,你现在应己理解,Mina中对流数的数据解析规则是依靠我们设定的Filter实现的,上例上我们传的是以一行为单位的字符串,这里我们要传对象,就不能用那个Filter了(至于都有哪些Filter,

19、去看文档吧!),这里,我们要设定是的ObjectSerializationCodecFactory 这个Filter,看名字你应知道是什么意思了吧,在服务器端:/创建一个非阻塞的Server端Socket,用NIO /设定这个过滤器将以对象为单位读取数据 ProtocolCodecFilter filter= new ProtocolCodecFilter(new ObjectSerializationCodecFactory();objectFilter,filter);. . . 当然,也少不了客户端要设定:/设定服务器端的消息处理器: . . . 第三步:收发对象:在自己实现IoHand

20、lerAdapter的类中,编写代码就是。这是最简单的一步了,看代码自己理解吧: /我们己设定了服务器解析消息的规则一个Userinfo对象为单位传输: Userinfo us=(Userinfo)message;收到客户机发来的用户对象:+us.toString(); /将对象发送给客户端 us.setUserName(服务器收到+count); session.write(us); Mina结构优雅,使用简单,功能强大,这是我给它的评价-但你不要在这一棵树上吊死哦,再推荐几个类似的东东,你可以自行比较其优劣:Cindy: QuickServer: http:/www.quickserver.org/ hessian :任务:1.完成如上示例代码编写,并使用Mina代替以前所写的Socket通信;2. 使用Mina测试你机器上可能的并发连结数;3自己摸索学习另外一个开源通信框架的简单入门。关键总结:

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1