服务器---客户端互相响应
简单的小例子,理解MINA是怎么工作的。
需要导入的包:
mina-core-2.00-M1.jar;
log4j-over-slf4j-1.5.0.jar;
slf4j-nop-1.5.0.jar
MINA服务器端代码
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IoSession;
//负责处理连接上来的客户机,即消息处理器
public class MinaServerHandler extends IoHandlerAdapter{
//客户端发送的消息到达时
@Override
public void messageReceived(IoSession session, Object message) throws Exception {
// TODO Auto-generated method stub
String s = (String)message;
System.out.println("来自客户端的消息:"+s);
session.write(s);
}
//一个客户端关闭时
@Override
public void sessionClosed(IoSession session) throws Exception {
// TODO Auto-generated method stub
System.out.println("one Client Disconnect");
}
//一个客户端接入时
@Override
public void sessionCreated(IoSession session) throws Exception {
// TODO Auto-generated method stub
System.out.println("one Client Connection");
}
}
启动服务器代码
import java.io.IOException;
import java.net.InetSocketAddress;
import org.apache.mina.core.filterchain.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.NioSocketAcceptor;
public class StartServer {
public static void main(String[] args) {
//创建一个非阻塞的serever端socket,用Nio
SocketAcceptor acceptor = new NioSocketAcceptor();
//创建接收数据的过滤器
DefaultIoFilterChainBuilder chain = acceptor.getFilterChain();
//设定这个过滤器规则(将一行一行读取数据)
chain.addLast("myChin", new ProtocolCodecFilter(new TextLineCodecFactory()));
//设定服务器端的消息处理器:一个MinaServerHandler对象
acceptor.setHandler(new MinaServerHandler());
//服务器端绑定的端口
int bindPort = 10000;
//绑定端口,启动服务器
try {
acceptor.bind(new InetSocketAddress(bindPort));
} catch(IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("Mina server is listing on:="+bindPort);
}
}
MINA客户端代码
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IoSession;
//Mina客户端消息处理器类
public class MinaClientHandler extends IoHandlerAdapter {
@Override
public void messageReceived(IoSession session, Object message) throws Exception {
// TODO Auto-generated method stub
String s = (String)message;
System.out.println("来自服务器的消息:"+s);
session.write(s);
}
@Override
public void sessionClosed(IoSession session) throws Exception {
// TODO Auto-generated method stub
System.out.println("服务器走了~");
}
@Override
public void sessionCreated(IoSession session) throws Exception {
// TODO Auto-generated method stub
System.out.println("one Client Connection"+session.getRemoteAddress());
session.write("我来了······");
}
}
启动客户端代码
import java.net.InetSocketAddress;
import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder;
import org.apache.mina.core.future.ConnectFuture;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.transport.socket.nio.NioSocketConnector;
public class StartClient {
@SuppressWarnings("deprecation")
public static void main(String[] args) {
//create tcp/ip connector
NioSocketConnector connector = new NioSocketConnector();
//创建接收数据的过滤器
DefaultIoFilterChainBuilder chain = connector.getFilterChain();
//设定这个过滤器将一行一行读数据
chain.addLast("myChin", new ProtocolCodecFilter(new TextLineCodecFactory()));
connector.setHandler(new MinaClientHandler());
connector.setConnectTimeout(30);
//连接到服务器
ConnectFuture cf = connector.connect(new InetSocketAddress("localhost",10000));
//wait for the connection attempt to be finished
cf.awaitUninterruptibly();
cf.getSession().getCloseFuture().awaitUninterruptibly();
connector.dispose();
}
}
先启动服务器,再启动客户端,就ok了,你的电脑可以狂奔了。
不写客户端可用
cmd-->telnet localhost 10000
来对话
分享到:
相关推荐
KWDB 是一款面向 AIoT 场景的分布式多模数据库产品,支持在同一实例同时建立时序库和关系库并融合处理多模数据,具备千万级设备接入、百万级数据秒级写入、亿级数据秒级读取等时序数据高效处理能力,具有稳定安全、高可用、易运维等特点。
yolo系列算法目标检测数据集,包含标签,可以直接训练模型和验证测试,数据集已经划分好,适用yolov5,yolov8,yolov9,yolov7,yolov10,yolo11算法; 包含两种标签格:yolo格式(txt文件)和voc格式(xml文件),分别保存在两个文件夹中; yolo格式:<class> <x_center> <y_center> <width> <height>, 其中: <class> 是目标的类别索引(从0开始)。 <x_center> 和 <y_center> 是目标框中心点的x和y坐标,这些坐标是相对于图像宽度和高度的比例值,范围在0到1之间。 <width> 和 <height> 是目标框的宽度和高度,也是相对于图像宽度和高度的比例值
那些年,与你同分同位次的同学都去了哪里?全国各大学在四川2020-2024年各专业最低录取分数及录取位次数据,高考志愿必备参考数据
做4.3这一节的时候的maple文件,仅供参考
stm32的实时时钟使用代码
基于go语言,使用gocv和socket实现摄像头视频传输项
jsoncpp不能正常解析,以及全角字符的问题,可以直接编辑使用.zip
在我们日常使用电脑的过程中,经常会遇到需要在不同网络环境下切换 IP 地址的情况。手动设置 IP 地址不仅繁琐,还容易出错。今天,我要向大家推荐一款超实用的网络管理工具 ——IP Switcher。 一、软件简介: IP Switcher 是一款功能强大的网络配置切换软件,它可以帮助用户在不同的网络环境下快速切换 IP 地址、子网掩码、网关、DNS 等网络设置,提高工作效率。 二、软件特点: 快速切换 IP Switcher 可以在几秒钟内完成网络配置的切换,无需手动设置 IP 地址、子网掩码、网关、DNS 等参数,大大节省了时间。 多种配置方案 用户可以根据不同的网络环境创建多个网络配置方案,每个方案可以设置不同的 IP 地址、子网掩码、网关、DNS 等参数。在需要切换网络环境时,只需选择相应的配置方案即可。 自动切换 IP Switcher 支持自动切换网络配置方案,可以根据用户设置的条件自动切换到相应的网络配置方案。例如,用户可以设置在连接到特定的无线网络时自动切换到相应的网络配置方案。 简单易用 IP Switcher 的界面简洁直观,操作非常方便。用户只需几个简单的步骤
tornado创建的一个web项目,实现了cookie,session,连接mysql和redis数据库,对主handler进行抽取,模拟登陆,图形化验证等一些功能业务_tornado_project.zip
mtk计算屏帧数的表格
fenlei20241031
那些年,与你同分同位次的同学都去了哪里?全国各大学在四川2020-2024年各专业最低录取分数及录取位次数据,高考志愿必备参考数据
爱心代码
那些年,与你同分同位次的同学都去了哪里?全国各大学在四川2020-2024年各专业最低录取分数及录取位次数据,高考志愿必备参考数据
CSDN海神之光上传的全部代码均可运行,亲测可用,尽我所能,为你服务; 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,可私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、物理应用 仿真:导航、地震、电磁、电路、电能、机械、工业控制、水位控制、直流电机、平面电磁波、管道瞬变流、刚度计算 光学:光栅、杨氏双缝、单缝、多缝、圆孔、矩孔衍射、夫琅禾费、干涉、拉盖尔高斯、光束、光波、涡旋 定位问题:chan、taylor、RSSI、music、卡尔曼滤波UWB 气动学:弹道、气体扩散、龙格库弹道 运动学:倒立摆、泊车 天体学:卫星轨道、姿态 船舶:控制、运动 电磁学:电场分布、电偶极子、永磁同步、变压器
摄像基本操作.ppt
那些年,与你同分同位次的同学都去了哪里?全国各大学在四川2020-2024年各专业最低录取分数及录取位次数据,高考志愿必备参考数据
那些年,与你同分同位次的同学都去了哪里?全国各大学在四川2020-2024年各专业最低录取分数及录取位次数据,高考志愿必备参考数据