Mina学习+手写服务端+通过telnet连接服务端
1.

2.

3.
4.MinaServer.java
package com.mina;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.charset.Charset;
import org.apache.mina.core.service.IoAcceptor;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.LineDelimiter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
public class MinaServer {
//定义端口
static int PORT=7080;
//服务端使用IoAcceptor
static IoAcceptor accept=null;
public static void main(String[] args) {
try {
//创建服务端的socket
accept=new NioSocketAcceptor();
//设置编码过滤器,完成协议的编码和解码
//new ProtocolCodecFilter(factory) factory为处理文本信息
accept.getFilterChain().addLast("codec", new ProtocolCodecFilter(
new TextLineCodecFactory(
Charset.forName("UTF-8"),
LineDelimiter.WINDOWS.getValue(),
LineDelimiter.WINDOWS.getValue())));
//设置缓冲区大小
accept.getSessionConfig().setReadBufferSize(1024);
//设置多长时间读和写,缓冲区没有读和写的空闲时间,超过10ms进入空闲状态
accept.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE,10);
//设置处理业务Handler
accept.setHandler(new Myhandler());
//绑定端口号
accept.bind(new InetSocketAddress(PORT));
System.out.println("服务端口号Server-->"+PORT);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("Server-->"+PORT);
}
}
5.Myhandler.java
package com.mina;
import java.util.Date;
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.session.IoSession;
/**
* 自定义的业务处理对象
* @author xjj13
*
*/
/**
* 选中Myhandler,右键source implement method
* @author xjj13
*
*/
public class Myhandler extends IoHandlerAdapter{
//连接出现异常所调用的方法
@Override
public void exceptionCaught(IoSession session, Throwable cause) throws Exception {
System.out.println("exceptionCaught");
}
//接受到数据要处理的事情
@Override
public void messageReceived(IoSession session, Object message) throws Exception {
String msg=(String)message;
System.out.println("服务端接收数据:"+msg);
Date date=new Date();
//当客户端输入exit时,退出连接
if (msg.equals("exit")) {
session.close();
}
//服务端接收到数据后发送到客户端
session.write(date);
}
//发送数据出去时要调用的方法
@Override
public void messageSent(IoSession session, Object message) throws Exception {
System.out.println("messageSent");
}
//session关闭时要调用的方法
@Override
public void sessionClosed(IoSession session) throws Exception {
System.out.println("sessionClosed");
}
//session创建时要调用的方法
@Override
public void sessionCreated(IoSession session) throws Exception {
System.out.println("sessionCreated");
}
//当读写缓冲区都没有超过的时候,多长时间处于空闲状态
@Override
public void sessionIdle(IoSession session, IdleStatus status) throws Exception {
System.out.println("sessionIdle");
}
//(session创建后的)打开session的方法
@Override
public void sessionOpened(IoSession session) throws Exception {
System.out.println("sessionOpened");
}
}
6.MinaServer.java,右键run as-->java application

7.cmd,输入命令telnet 127.0.0.1 7080
输入hello,console输出:

当客端一直不输入数据,就会输出sessionIdle

总结:
1.设置NIOSocket
2.设置编码解码过滤器(可以设置多种过滤器)
3.设置一些session的属性,如:空闲时间,缓冲区大小等
4.绑定一个端口
Mina学习+手写服务端+通过telnet连接服务端的更多相关文章
- 手写MQ框架(二)-服务端实现
一.起航 书接上文->手写MQ框架(一)-准备启程 本着从无到有,从有到优的原则,所以计划先通过web实现功能,然后再优化改写为socket的形式. 1.关于技术选型 web框架使用了之前写的g ...
- 深度学习---手写字体识别程序分析(python)
我想大部分程序员的第一个程序应该都是“hello world”,在深度学习领域,这个“hello world”程序就是手写字体识别程序. 这次我们详细的分析下手写字体识别程序,从而可以对深度学习建立一 ...
- Go组件学习——手写连接池并没有那么简单
1.背景 前段时间在看gorm,发现gorm是复用database/sql的连接池. 于是翻了下database/sql的数据库连接池的代码实现,看完代码,好像也不是很复杂,但是总觉得理解不够深刻,于 ...
- 学习手写vue,理解原理
class Compiler{ constructor(el,vm){ // 判断el属性 是不是 一个元素, 如果不是就获取 this.el = this.isElementNode(el)?el: ...
- 手写MQ框架(一)-准备启程
一.背景 很久以前写了DAO框架和MVC框架,前段时间又重写了DAO框架-GDAO(手写DAO框架(一)-从“1”开始,源码:https://github.com/shuimutong/gdao.gi ...
- 30天轻松学习javaweb_通过telnet连接http服务器
telnet是windows自带的网络连接工具,可以用于连接任何服务器. 通过Telnet连接服务端 Telnet localhost 8080GET /news/1.html HTTP/1.1Hos ...
- 剖析手写Vue,你也可以手写一个MVVM框架
剖析手写Vue,你也可以手写一个MVVM框架# 邮箱:563995050@qq.com github: https://github.com/xiaoqiuxiong 作者:肖秋雄(eddy) 温馨提 ...
- java 从零开始手写 RPC (05) reflect 反射实现通用调用之服务端
通用调用 java 从零开始手写 RPC (01) 基于 socket 实现 java 从零开始手写 RPC (02)-netty4 实现客户端和服务端 java 从零开始手写 RPC (03) 如何 ...
- java 从零开始手写 RPC (03) 如何实现客户端调用服务端?
说明 java 从零开始手写 RPC (01) 基于 socket 实现 java 从零开始手写 RPC (02)-netty4 实现客户端和服务端 写完了客户端和服务端,那么如何实现客户端和服务端的 ...
随机推荐
- 虚拟环境搭建Django项目
下载虚拟环境包 pip install virtualenv 创建虚拟环境 virtualenv env 进入env文件夹 cd env 进入Scripts文件夹 cd Scripts 启动虚拟环 ...
- 网络编程 - 端口 & 地址占用
1.设置地址复用(还可以设置端口复用): int enable=1; if (setsockopt(socketfd,SOL_SOCKET,SO_REUSEADDR,&iEnable,size ...
- 【并发】6、借助FQueue 实现多线程生产消费队列
1.这里先要说一下为什么会想到fqueue,因为这个是一个轻量级的消息队列框架,并且速度很快,用起来很方便,就是这样 当然后期考虑使用redis,这里先上一个fqueue的版本,后面有时间我再吧他改成 ...
- fatfs系统的移植
integer.h FATFS的数据类型定义(一般不需要更改,其他的文件都需要引用这个文件的内容) ffcon.h FATFS的配置文件,配置项的各个参数都需要在这里修改 一个细致的讲解fatfs ...
- 案例(1)-- OOM异常
问题描述: 1.系统在执行某个操作时,必现OOM异常. 问题的定位: 1.排查代码,未发现问题. 2.在虚拟机启动时,添加参数:-XX:+HeapDumpOnOutOfMemoryError(当发生o ...
- Docker学习笔记导航帖
1. Docker安装 安装docker https://www.cnblogs.com/kreo/p/10813010.html
- Golang高并发抓取HTML图片
Golang高并发抓取HTML图片 使用准备 1.安装Golang 2.下载爬虫包 go get -v github.com/hunterhug/marmot/util go get -v githu ...
- Linux判断SSD或HDD + 模拟SSD
判断方法 方法一 判断cat /sys/block/*/queue/rotational的返回值(其中*为你的硬盘设备名称,例如sda等等),如果返回1则表示磁盘可旋转(HDD),返回0,则表示磁盘不 ...
- C# 泛型集合排序
Student sModel = new Student(); List<Student > list = new List<Student >(); list= list.O ...
- 【转载】如何自己DIY组装一台台式电脑
针对很多懂计算机的人员来说,有时候都希望自己DIY组装一台台式机,来达到自己的个性化要求以及省钱.其实自己DIY组装一台电脑也很简单,将相应的CPU处理器.主板.内存条.硬盘.固态硬盘.电脑机箱.屏幕 ...