zoukankan      html  css  js  c++  java
  • Mina的服务器

    (一)

    package testMina;
    
    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.TextLineCodecFactory;
    import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
    
    public class MinaSimpleServer {
    	private static final int PORT = 9123;
    	private static final String HOST = "localhost";
    
    	public static void main(String[] args) {
    		// 接收者
    		IoAcceptor acceptor = new NioSocketAcceptor();
    		// 设置编码器
    		acceptor.getFilterChain().addLast("codec",
    				new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8"))));
    		// 设置Handler
    		acceptor.setHandler(new TimeServerHandler());
    		// 心跳
    		acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 6);
    		// 绑定端口,启动服务,并开始处理远程客户端请求
    		try {
    			acceptor.bind(new InetSocketAddress(HOST, PORT));
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		System.out.println("服务端启动成功");
    	}
    }
    

    (二)

    package testMina;
    
    import java.sql.Timestamp;
    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;
    
    public class TimeServerHandler extends IoHandlerAdapter {
    	private int count = 0;
    
    	// 由底层决定是否创建一个session
    	@Override
    	public void sessionCreated(IoSession session) {
    		System.out.println("新的连接");
    	}
    
    	// 创建了session 后会回调sessionOpened
    	public void sessionOpened(IoSession session) throws Exception {
    		count++;
    		System.out.println("第 " + count + " 个 client 登陆!address: : " + session.getRemoteAddress());
    	}
    
    	// 有异常时执行方法
    	@Override
    	public void exceptionCaught(IoSession session, Throwable cause) throws Exception {
    		System.out.println("客户端断了!!!");
    		//cause.printStackTrace();
    	}
    	
    	//接收消息时调用
    	@Override
    	public void messageReceived(IoSession session, Object message) throws Exception {
    		String str = message.toString();
    		System.out.println("接受到的数据是:" + message);
    		if (str.trim().equalsIgnoreCase("quit")) {
    			session.close();
    			return;
    		}
    		Date date = new Date();
    		// 向输出流中写东西
    		session.write(date.toString());
    		System.out.println("Message written...");
    	}
    	// session 关闭调用
    	@Override
    	public void sessionClosed(IoSession session) {
    		System.out.println("one client disconnect");
    		session.close(session.isConnected());
    	}
    
    	// 当连接空闲时触发此方法.
    	@Override
    	public void sessionIdle(IoSession session, IdleStatus status) {
    		System.out.println("【时间】:"+new Timestamp(System.currentTimeMillis())+"连接空闲(心跳机制)");
    	}
    
    	// 当信息已经传送给客户端后触发此方法.
    	@Override
    	public void messageSent(IoSession session, Object message) {
    		System.out.println("信息已经传送给客户端");
    	}
    }
    
  • 相关阅读:
    关于.net core https支持的整理
    数据库动态字段 个人设计的思考
    解决PowerDesigner中table的code长度限制和column的code长度限制
    Git内网服务器搭建
    解决.net core读取appSetting.json文件中文字符乱码
    excel 转换成pdf 总结
    .net生成荣誉证书
    Adobe Acrobat DC 安装
    swagger生成错误问题 汇总解决
    svn或git 提交文件排除
  • 原文地址:https://www.cnblogs.com/wangjianly/p/8462389.html
Copyright © 2011-2022 走看看