服务端代码: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();

}

@Override

public 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 sessions = session.getService().getManagedSessions().values();

//  // 向所有客户端发送数据

//  for (IoSession sess : sessions) {

//   sess.write(buffer);

//  }

}

@Override

public void sessionClosed(IoSession session) throws Exception {

System.out.println("会话关闭");

}

@Override

public void exceptionCaught(IoSession session, Throwable cause)

throws Exception {

System.out.println("会话异常");

super.exceptionCaught(session, cause);

}

@Override

public void messageSent(IoSession iosession, Object obj) throws Exception {

System.out.println("服务端消息发送");

super.messageSent(iosession, obj);

}

@Override

public void sessionCreated(IoSession iosession) throws Exception {

System.out.println("会话创建");

super.sessionCreated(iosession);

}

@Override

public void sessionIdle(IoSession iosession, IdleStatus idlestatus)

throws Exception {

System.out.println("会话休眠");

super.sessionIdle(iosession, idlestatus);

}

@Override

public 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

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);

}

@Override

public 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));

}

@Override

public void exceptionCaught(IoSession session, Throwable cause)

throws Exception {

System.out.println("客户端异常");

super.exceptionCaught(session, cause);

}

@Override

public void messageSent(IoSession iosession, Object obj) throws Exception {

System.out.println("客户端消息发送");

super.messageSent(iosession, obj);

}

@Override

public void sessionClosed(IoSession iosession) throws Exception {

System.out.println("客户端会话关闭");

super.sessionClosed(iosession);

}

@Override

public void sessionCreated(IoSession iosession) throws Exception {

System.out.println("客户端会话创建");

super.sessionCreated(iosession);

}

@Override

public void sessionIdle(IoSession iosession, IdleStatus idlestatus)

throws Exception {

System.out.println("客户端会话休眠");

super.sessionIdle(iosession, idlestatus);

}

@Override

public 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

客户端会话关闭

示例仅供参考

java mina tcp_Mina TCP服务端客户端 示例相关推荐

  1. JAVA NIO 异步TCP服务端向客户端消息群发代码教程实战

    前言 项目需要和第三方厂商的服务需要用TCP协议通讯,考虑到彼此双方可能都会有断网重连.宕机重启的情况,需要保证 发生上述情况后,服务之间能够自动实现重新通信.研究测试之后整理如下代码实现.因为发现客 ...

  2. Go实现简单的TCP服务端客户端通信(有黏包)

    目录 客户端代码 服务端代码 封包协议 客户端代码 // socket_stick/client2/main.gofunc main() {conn, err := net.Dial("tc ...

  3. 为什么TCP服务端需要调用bind函数而客户端通常不需要呢

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 那一年, ...

  4. java BIO tcp服务端向客户端消息群发代码教程实战

    前言 项目需要和第三方厂商的服务需要用TCP协议通讯,考虑到彼此双方可能都会有断网重连.宕机重启的情况,需要保证 发生上述情况后,服务之间能够自动实现重新通信.研究测试之后整理如下代码实现.因为发现客 ...

  5. Java Websocket实例【服务端与客户端实现全双工通讯】

    Java Websocket实例[服务端与客户端实现全双工通讯] 现很多网站为了实现即时通讯,所用的技术都是轮询(polling).轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发 出HTTP ...

  6. TCP/IP网络编程之基于TCP的服务端/客户端(二)

    回声客户端问题 上一章TCP/IP网络编程之基于TCP的服务端/客户端(一)中,我们解释了回声客户端所存在的问题,那么单单是客户端的问题,服务端没有任何问题?是的,服务端没有问题,现在先让我们回顾下服 ...

  7. TCP/IP网络编程之基于TCP的服务端/客户端(一)

    TCP/IP网络编程之基于TCP的服务端/客户端(一) 理解TCP和UDP 根据数据传输方式的不同,基于网络协议的套接字一般分为TCP套接字和UDP套接字.因为TCP套接字是面向连接的,因此又称为基于 ...

  8. windows Socket编程之TCP服务端与客户端

    在前面的文章中有一篇讲到了命名管道通信,它是创建一根管道来进行进程之间或网络之间通信的.但是它有些缺陷,比如说效率较低等.而从这篇文章开始将介绍socket编程.socket是通过TCP,UDP,IP ...

  9. 易语言tcp多线程服务端客户端_从TCP协议到TCP通信的各种异常现象和分析

    很多人总觉得学习TCP/IP协议没什么用,觉得日常编程开发只需要知道socket接口怎么用就可以了.如果大家定位过线上问题就会知道,实际上并非如此.如果应用在局域网内,且设备一切正常的情况下可能确实如 ...

最新文章

  1. 「干货」小程序风头正劲,传统商家该如何把握机会抢占红利?
  2. Python基础09 面向对象的进一步拓展
  3. bose耳机信号断续_挥汗如雨的夏季将至,5款运动型蓝牙耳机安利给你
  4. LeetCode 1004.最长连续1的个数
  5. ABP入门系列(21)——切换MySQL数据库
  6. 在unity 中,使用http请求,下载文件到可读可写路径
  7. 网站(前端、后端)性能(架构)优化手段
  8. 分布式事务框架 - Seata
  9. HCIE-RS面试----数据帧格式
  10. 【算法笔记+SGU275+HDU3949】线性基(XOR,求n个数异或得到的第k小的数)
  11. 目前,有哪些云计算平台,值得我们选择
  12. c 语言翻译软件,分享一款 程序员秒懂 很优雅的翻译软件
  13. RV1126 OTG 功能
  14. LiveZilla 详细 配置 设置 (四) 查看成果及总结
  15. 根据两点经纬度计算方位角
  16. 剑指offer--46.47.发散思维能力
  17. 基于python下django框架 实现校园排课选课系统详细设计
  18. html简单歌词同步教程,HTML5实现歌词同步(示例代码)
  19. bigemap如何设置等高线坐标系并输出
  20. 随机信号处理笔记之色噪声及白化滤波器

热门文章

  1. 带你看数据结构都学什么
  2. java nio 与io_Java NIO 与IO区别
  3. JAVA 经典面试题:ES如何做到亿级数据查询毫秒级返回?
  4. 芒芒分期换“套路”以VIP会员费收割用户,海尔金控旗下快捷通提供支付通道
  5. 面试官:介绍一下你简历中的项目,细讲一点,附项目实战
  6. AirDIsk产品第三方Samba同步工具
  7. 制作TEC数据集的步骤
  8. Unity Asset Store越来越多
  9. 计算机怎么恢复原厂,电脑怎么还原系统?教你快速还原
  10. 关于西瓜视频加密算法的总结