Mina TCP服务端客户端 示例
来源:互联网 发布:测试网络稳定性软件 编辑:程序博客网 时间:2024/06/15 09:24
服务端代码:
package com.xd.nms.example;import java.io.IOException;import java.net.InetSocketAddress;import org.apache.mina.core.buffer.IoBuffer;import org.apache.mina.core.service.IoHandlerAdapter;import org.apache.mina.core.session.IdleStatus;import org.apache.mina.core.session.IoSession;import org.apache.mina.transport.socket.nio.NioSocketAcceptor;import com.xd.nms.util.ByteAndStr16;/** * @说明 Mina TCP 服务端 * @author 崔素强 * @version 1.0 * @since */public class MinaTcpServer extends IoHandlerAdapter {public static final int PORT = 18567;public MinaTcpServer() throws IOException {NioSocketAcceptor acceptor = new NioSocketAcceptor();acceptor.setHandler(this);acceptor.bind(new InetSocketAddress(PORT));System.out.println("TCP服务启动,端口:" + PORT);}public static void main(String[] args) throws IOException {new MinaTcpServer();}@Overridepublic void messageReceived(IoSession session, Object message)throws Exception {IoBuffer bbuf = (IoBuffer) message;byte[] byten = new byte[bbuf.limit()];bbuf.get(byten, bbuf.position(), bbuf.limit());System.out.println("收到消息:" + ByteAndStr16.Bytes2HexString(byten));byte[] bts = new byte[10];for(int i=0;i<10;i++){bts[i] = (byte)i;}IoBuffer buffer = IoBuffer.allocate(10);buffer.put(bts);buffer.flip();session.write(buffer);//// 拿到所有的客户端Session//Collection<IoSession> sessions = session.getService().getManagedSessions().values();//// 向所有客户端发送数据//for (IoSession sess : sessions) {//sess.write(buffer);//}}@Overridepublic void sessionClosed(IoSession session) throws Exception {System.out.println("会话关闭");}@Overridepublic void exceptionCaught(IoSession session, Throwable cause)throws Exception {System.out.println("会话异常");super.exceptionCaught(session, cause);}@Overridepublic void messageSent(IoSession iosession, Object obj) throws Exception {System.out.println("服务端消息发送");super.messageSent(iosession, obj);}@Overridepublic void sessionCreated(IoSession iosession) throws Exception {System.out.println("会话创建");super.sessionCreated(iosession);}@Overridepublic void sessionIdle(IoSession iosession, IdleStatus idlestatus)throws Exception {System.out.println("会话休眠");super.sessionIdle(iosession, idlestatus);}@Overridepublic void sessionOpened(IoSession iosession) throws Exception {System.out.println("会话打开");super.sessionOpened(iosession);}}
服务端建立端口监听后,收到消息后进入messageReceived()方法,示例处理是打印该消息,然后组装了一个0-9的数据返回回去
注意,即使使用的是Mina,仍需做分包、粘包,等处理,例如有时一条数据不是一次发过来的
客户端程序:
package com.xd.nms.example;import java.net.InetSocketAddress;import org.apache.mina.core.buffer.IoBuffer;import org.apache.mina.core.future.ConnectFuture;import org.apache.mina.core.service.IoConnector;import org.apache.mina.core.service.IoHandlerAdapter;import org.apache.mina.core.session.IdleStatus;import org.apache.mina.core.session.IoSession;import org.apache.mina.transport.socket.nio.NioSocketConnector;import com.xd.nms.util.ByteAndStr16;/** * @说明 Mina TCP客户端 * @author 崔素强 * @version 1.0 * @since */public class MinaTcpClient extends IoHandlerAdapter {private IoConnector connector;private static IoSession session;public MinaTcpClient() {connector = new NioSocketConnector();connector.setHandler(this);ConnectFuture connFuture = connector.connect(new InetSocketAddress("localhost", MinaTcpServer.PORT));connFuture.awaitUninterruptibly();session = connFuture.getSession();System.out.println("TCP 客户端启动");}public static void main(String[] args) throws Exception {MinaTcpClient client = new MinaTcpClient();for(int j=0;j<2;j++){ // 发送两遍byte[] bts = new byte[20];for (int i = 0; i < 20; i++) {bts[i] = (byte) i;}IoBuffer buffer = IoBuffer.allocate(20);// 自动扩容buffer.setAutoExpand(true);// 自动收缩buffer.setAutoShrink(true);buffer.put(bts);buffer.flip();session.write(buffer);Thread.sleep(2000);}// 关闭会话,待所有线程处理结束后client.connector.dispose(true);}@Overridepublic void messageReceived(IoSession iosession, Object message)throws Exception {IoBuffer bbuf = (IoBuffer) message;byte[] byten = new byte[bbuf.limit()];bbuf.get(byten, bbuf.position(), bbuf.limit());System.out.println("客户端收到消息" + ByteAndStr16.Bytes2HexString(byten));}@Overridepublic void exceptionCaught(IoSession session, Throwable cause)throws Exception {System.out.println("客户端异常");super.exceptionCaught(session, cause);}@Overridepublic void messageSent(IoSession iosession, Object obj) throws Exception {System.out.println("客户端消息发送");super.messageSent(iosession, obj);}@Overridepublic void sessionClosed(IoSession iosession) throws Exception {System.out.println("客户端会话关闭");super.sessionClosed(iosession);}@Overridepublic void sessionCreated(IoSession iosession) throws Exception {System.out.println("客户端会话创建");super.sessionCreated(iosession);}@Overridepublic void sessionIdle(IoSession iosession, IdleStatus idlestatus)throws Exception {System.out.println("客户端会话休眠");super.sessionIdle(iosession, idlestatus);}@Overridepublic void sessionOpened(IoSession iosession) throws Exception {System.out.println("客户端会话打开");super.sessionOpened(iosession);}}
向服务端发送两次0-19的数据,收到消息后同样进入messageReceived()方法,处理同样是打印显示!
打印结果:
TCP服务启动,端口:18567会话创建会话打开收到消息:00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 服务端消息发送收到消息:00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 服务端消息发送会话关闭
客户端会话创建客户端会话打开TCP 客户端启动客户端消息发送客户端收到消息00 01 02 03 04 05 06 07 08 09 客户端消息发送客户端收到消息00 01 02 03 04 05 06 07 08 09 客户端会话关闭
请您到ITEYE网站看原创,谢谢!
http://cuisuqiang.iteye.com/ !
自建博客地址:http://www.javacui.com/ ,内容与ITEYE同步!
0 0
- Mina TCP服务端客户端 示例
- Mina TCP服务端客户端 示例
- Mina TCP服务端客户端 示例
- TCP服务端和客户端程序示例
- Mina服务端客户端心跳机制
- linux下TCP编程示例(服务端/客户端)
- 基于Python的TCP服务端/客户端简单应用示例
- 基于Python多线程的TCP客户端/服务端应用示例
- TCP服务端与客户端
- tcp客户端服务端demo
- TCP-客户端连接服务端
- MINA服务端与C++客户端通讯 1
- MINA服务端与C++客户端通讯 2
- mina服务端与c++客户端通信1
- mina服务端与c++客户端通信2
- Mina客户端和服务端代码编写
- MINA客户端与服务端通信实例
- mina框架客户端与服务端+java+maven
- Linux 使用脚本安装MySQL数据库
- Linux下 卸载通过WINE安装的程序并且卸载source insight
- A20 编译过程
- 使用FlashPaper 实现JSP在线阅读
- JDBC 插入数据返回数据主键
- Mina TCP服务端客户端 示例
- C语言!和~
- iOS:Block详解
- 传入Java对象 自动创建动态表 并录入数据
- 协议使用OCTET,请指定具体语意
- Business Object Validation Using Attributes in C#
- Byte和Bit之间的转换
- Cocos2d-x3.3RC0 Cpp-test分析之NewAudioEngineDemo
- JDBC 查询 Map转对象