zoukankan      html  css  js  c++  java
  • 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.绑定一个端口

  • 相关阅读:
    CComboBox(组合框)控件 学习要点
    弹出菜单的实现
    剪贴板(clipboard)功能
    bash1---基本0
    CHAPTER 2 -----Reapresenting and Manipulating Information(1)
    关于Linux磁盘分区与双系统
    CHAPTER 1 ----- a tour of computer sysytems(3)
    CHAPTER 1 ----- a tour of computer sysytems(2)
    CHAPTER 1 ----- a tour of computer sysytems(1)
    [2017.4.14] 随笔一 ------头文件中用宏定义调试语句(引用C语言写爬虫的初学项目)
  • 原文地址:https://www.cnblogs.com/curedfisher/p/11887060.html
Copyright © 2011-2022 走看看