• nio/mina(二)mina传字符串


    服务端:

    MainServer.java

    package com.nafio.mina;
    
    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 MainServer {
    
    	/**
    	 * @param args
    	 */
    	public static void main(String[] args) throws Exception{
    		//创建一个非阻塞的Server端Socket
    		SocketAcceptor acceptor = new NioSocketAcceptor();
    		//创建接收数据的过滤器
    		DefaultIoFilterChainBuilder chain = acceptor.getFilterChain();
    		//设定这个过滤器将一行一行(/r/n)的读取数据
    		chain.addLast("myChin", new ProtocolCodecFilter(new
    		TextLineCodecFactory()));
    		//设定服务器端的消息处理器:一个SamplMinaServerHandler对象,
    		acceptor.setHandler(new MinaServerHandler());
    		// 服务器端绑定的端口
    		int bindPort=9988;
    		//绑定端口,启动服务器
    		acceptor.bind(new InetSocketAddress(bindPort));
    		System.out.println("Mina Server is Listing on:= " + bindPort);
    	}
    
    }


    2 MinaServerHandler.java

    package com.nafio.mina;
    
    import org.apache.mina.core.service.IoHandlerAdapter;
    import org.apache.mina.core.session.IoSession;
    
    public class MinaServerHandler extends IoHandlerAdapter{
    
    	/**
    	 * 当客户端发送消息到达时
    	 */
    
    	public void messageReceived(IoSession session, Object message)
    	throws Exception {
    		//super.messageReceived(session, message);
    		//我们己设定了服务器解析消息的规则是一行一行读取,这里就可转为String:
    		
    		System.out.println("ServerMessageReceived");
    		
    		String s=(String)message;
    		// Write the received data back to remote peer
    		System.out.println("服务端->收到客户机发来的消息: "+s);
    		//测试将消息回送给客户端
    		session.write(s+count);
    		count++;
    	}
    	private int count = 0;
    
    	public void messageSent(IoSession session, Object message) throws Exception {
    		System.out.println("服务端->messageSent");
    	}
    
    
    	public void sessionClosed(IoSession session) throws Exception {
    		System.out.println("服务端->sessionClosed");
    	}
    
    	@Override
    	public void sessionCreated(IoSession session) throws Exception {
    		System.out.println("服务端->sessionCreated");
    	}
    
    	/**
    	 * 当新客户端连接时调用
    	 */
    
    	public void sessionOpened(IoSession session) throws Exception {
    		System.out.println("服务端->Open");
    	}
    
    }
    


     

    客户端:

    1 MainClient.java

    package com.nafio.mina;
    
    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 MainClient {
    	public static void main(String[] args) throws Exception{
    		// 创建 TCP/IP connector.
    		NioSocketConnector connector = new NioSocketConnector();
    		// 创建接收数据的过滤器
    		DefaultIoFilterChainBuilder chain = connector.getFilterChain();
    		//设定这个过滤器将一行一行(/r/n)的读取数据
    		chain.addLast("myChin", new ProtocolCodecFilter(new
    		TextLineCodecFactory()));
    		//设定服务器端的消息处理器:一个SamplMinaServerHandler对象,
    		connector.setHandler(new MinaClientHandler());
    		// Set connect timeout.
    		connector.setConnectTimeout(30);
    		//连结到服务器:
    		ConnectFuture cf = connector.connect(new
    		InetSocketAddress("localhost", 9988));
    		
    		cf.awaitUninterruptibly();
    		cf.getSession().getCloseFuture().awaitUninterruptibly();
    		connector.dispose();
    	}
    }
    


    2 MinaClientHandler.java

    package com.nafio.mina;
    
    import org.apache.mina.core.service.IoHandlerAdapter;
    import org.apache.mina.core.session.IoSession;
    
    public class MinaClientHandler extends IoHandlerAdapter{
    
    
    	/**
    	 * 当客户端发送的消息到达时
    	 */
    	@Override
    	public void messageReceived(IoSession session, Object message)
    	throws Exception {
    
    		String s=(String)message;
    		System.out.println("客户端->服务器发来的消息: "+s);
    	}
    
    
    	@Override
    	public void messageSent(IoSession session, Object message) throws Exception {
    		super.messageSent(session, message);
    		System.out.println("客户端->messageSent");
    	}
    
    	@Override
    	public void sessionClosed(IoSession session) throws Exception {
    		System.out.println("客户端->sessionClosed");
    	}
    
    	@Override
    	public void sessionCreated(IoSession session) throws Exception {
    		System.out.println("客户端->sessionCreated");
    	}
    
    	@Override
    	public void sessionOpened(IoSession session) throws Exception {
    		System.out.println("客户端->sessionOpened");
    
    		//发送信息
    		try
    		{
    			SendMsg(session);
    		}
    		catch(Exception e)
    		{
    			e.printStackTrace();
    		}
    	}
    
    	//by nafio 自己写的函数
    	public void SendMsg(IoSession session) throws Exception{
    		//		TransferClass tansferClass=new TransferClass();
    		//		tansferClass.setNum(1);
    		//		tansferClass.setString("字符串");
    		String tansferStr="我是数据";
    		session.write(tansferStr);	
    	}
    
    
    }
    


     

  • 相关阅读:
    关于jQuery中click&live&on中的坑
    redis 主从配置和集群配置
    python 搭建redis集群
    事件冒泡及事件委托的理解(JQuery Dom操作)
    python中import和from-import的区别
    python中赋值-浅拷贝-深拷贝之间的关系
    学生管理系统.JavaScript
    学生管理系统.c
    电梯演讲与原型展示
    软件需求分析
  • 原文地址:https://www.cnblogs.com/nafio/p/9137764.html
Copyright © 2020-2023  润新知