Mina学习笔记(二) 简单客户端实例
来源:互联网 发布:js防水液体怎么用 编辑:程序博客网 时间:2024/05/16 14:33
上一篇实现了一个简单的服务端程序。
现在来实现一个客户端程序
程序功能:
客户端发送一个字符串给服务端, 服务端返回当前时间给客户端。
基于上一文中的项目 ,首先加入两个对象,分别是SendMessageVO、ResultMessageVO
package com.zf.mina.test01;import java.io.Serializable;/** * 客户端发送给服务端的对象 * @author Administrator * */public class SendMessageVO implements Serializable{private static final long serialVersionUID = -7845817716564707395L;private String value ;public SendMessageVO(String value) {super();this.value = value;}public String getValue() {return value;}public void setValue(String value) {this.value = value;}}
package com.zf.mina.test01;import java.io.Serializable;/** * 服务端返回给客户端的对象 * @author Administrator * */public class ResultMessageVO implements Serializable{private static final long serialVersionUID = -5859798424107423872L;private String message ;public ResultMessageVO(String message) {super();this.message = message;}public String getMessage() {return message;}public void setMessage(String message) {this.message = message;}}
然后修改上一文中的MinaTimeServer与TimeServerHandler
将MinaTimeServer中的编码转换器设置为 ObjectSerializationCodecFactory,即:
acceptor.getFilterChain().addLast("codec", new ProtocolCodecFilter(new ObjectSerializationCodecFactory()));
然后将TimeServerHandler中的messageReceived方法的实现做一下修改
/** * 当接收到客户端发来的消息时,此方法会被触发 */public void messageReceived(IoSession session, Object message)throws Exception {SendMessageVO msg = (SendMessageVO)message ; //获取客户端发来的消息if(msg.getValue().trim().equalsIgnoreCase("quit")){session.close(false) ;System.out.println("Session closed");return ;}System.out.println("收到客户端消息:" + msg.getValue());Date date = new Date() ;ResultMessageVO result = new ResultMessageVO(date.toLocaleString()) ;session.write(result) ; //将消息发送给客户端System.out.println("Message wittern...");}
接下来编写编写客户端主程序
package com.zf.mina.test01;import java.net.InetSocketAddress;import org.apache.mina.core.future.ConnectFuture;import org.apache.mina.core.session.IoSession;import org.apache.mina.filter.codec.ProtocolCodecFilter;import org.apache.mina.filter.codec.serialization.ObjectSerializationCodecFactory;import org.apache.mina.transport.socket.nio.NioSocketConnector;public class MinaTimeClient {public static void main(String[] args) {//首先创建一个NioSocketConnector 用于链接服务端NioSocketConnector connector = new NioSocketConnector() ;//加入编码/解码Filterconnector.getFilterChain().addLast("codec", new ProtocolCodecFilter(new ObjectSerializationCodecFactory())) ;//设置IO处理器connector.setHandler(new ClientSessionHandler("is_zhoufeng")) ;//链接服务端ConnectFuture connectFuture =connector.connect(new InetSocketAddress("localhost", 8080)) ;//阻塞等待,知道链接服务器成功,或被中断connectFuture.awaitUninterruptibly() ;IoSession session = connectFuture.getSession() ;//阻塞,知道session关闭session.getCloseFuture().awaitUninterruptibly() ;//关闭链接connector.dispose() ;}}
IO事件处理器
package com.zf.mina.test01;import org.apache.mina.core.service.IoHandlerAdapter;import org.apache.mina.core.session.IoSession;/** * 处理客户端IO事件 * @author Administrator * */public class ClientSessionHandler extends IoHandlerAdapter {//要发送给服务端的消息private final String value ;public ClientSessionHandler(String value){this.value = value ;}//当与服务端链接成功时Session会被创建,同时会触发该方法public void sessionOpened(IoSession session) throws Exception {//发送消息给服务端session.write(new SendMessageVO(value)) ;System.out.println("发送消息\"" + value + "\"给服务端成功");}//当接收到服务端发送来的消息时,会触发该方法@Overridepublic void messageReceived(IoSession session, Object message)throws Exception {ResultMessageVO msg = (ResultMessageVO)message ;System.out.println("收到服务端回复,内容:" + msg.getMessage()); session.close(false) ;}@Overridepublic void exceptionCaught(IoSession session, Throwable cause)throws Exception {session.close(false) ;//当发送异常,就关闭session}}
然后,先启动服务端程序。
再启动客户端程序。 就能看到程序效果了
0 0
- Mina学习笔记(二) 简单客户端实例
- Mina学习笔记(一) 简单服务端实例
- Mina学习笔记(一) 简单服务端实例
- Mina学习(一):mina实现简单服务端与客户端
- MINA学习笔记二
- Mina框架学习笔记(二)
- Mina框架学习笔记(二)
- Mina框架学习笔记(二)
- Mina框架学习笔记(二)
- Apache MINA客户端服务器简单实例
- Mina学习笔记 简单EchoServer(二) 编码解码修改
- Mina学习(二)
- mina客户端实例
- Mina 简单案例(客户端与服务端)
- MINA学习笔记二_基础
- mina学习笔记(1)
- Mina学习(二): mina体系结构简要分析
- mina学习基础-入门实例-传输java对象(二)
- Latex设定表格列宽
- 小程序:Java下载单页HTML(可下载引用资源)
- C语言 未完全
- helper function: compare two SYSTEMTIME, to get time span
- 跑分都浮云,电脑安装android-x86 4.3教程
- Mina学习笔记(二) 简单客户端实例
- 写代码烦躁时看看,挺好
- 2.2: 随机生成一个n bit位的长整数
- Java实现局域网内单播
- second order system analysis in adaptive control 自控 带零点的二阶系统matlab仿真分析
- #英文版 CS145 1#
- 不可逆加密思路
- 设计模式学习之——六大设计原则之六:开闭原则
- test