mina 的几个简单例子

 

 

mina 发送字符串给服务器,服务器读取的例子,两个文件

 

 

package test2;

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 MainServer {
	public static void main(String args[]) throws IOException{
		//创建一个非阻塞的Server端socket 用NIO
		SocketAcceptor acceptor = new NioSocketAcceptor();
		//创建接收数据的过滤器
		DefaultIoFilterChainBuilder chain= acceptor.getFilterChain();
		//设定这个过滤器一行一行的(/r/n)的读取数据
		chain.addLast("myChin", new ProtocolCodecFilter(new TextLineCodecFactory()));
		//设定服务器端的消息处理器 new 一个对象
		acceptor.setHandler(new SamplMinaServerHandler());
		//服务器绑定的端口
		int bindport=9988;
		//绑定端口,启动服务器
		acceptor.bind(new InetSocketAddress(bindport));
		System.out.println("start ok,listen on:="+bindport);
		
	}

}
 

 

 

 

package test2;

import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.session.IoSession;

public class SamplMinaServerHandler extends IoHandlerAdapter {

	public SamplMinaServerHandler() {
		// TODO Auto-generated constructor stub
	}
	
	@Override
	public void sessionOpened(IoSession session )throws Exception{
		System.out.println("sessionOpened  incomming client :"+session.getRemoteAddress());
	}

	@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
		String str=(String)message;
		System.out.println("收到客户端信息:"+str);
		//将消息会送到客户端
		session.write(str);
		
		
	
		
		
		System.out.println("messageReceived");

	}
	

	@Override
	public void messageSent(IoSession session, Object message) throws Exception {
		// TODO Auto-generated method stub
		System.out.println("messageSent");
	}

	@Override
	public void sessionClosed(IoSession session) throws Exception {
		System.out.println("sessionClose");
	}

	@Override
	public void sessionCreated(IoSession session) throws Exception {
		// TODO Auto-generated method stub
	System.out.println("sessionCreate");
	}

	@Override
	public void sessionIdle(IoSession session, IdleStatus status)
			throws Exception {
		// TODO Auto-generated method stub
		System.out.println("sessionIdle");
	}

	


}
 

 

 

这两个是客户端,用于连接服务器

 

 

package client;

import java.net.InetSocketAddress;
import java.net.SocketAddress;
import java.nio.charset.Charset;

import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder;
import org.apache.mina.core.future.ConnectFuture;
import org.apache.mina.core.service.IoConnector;
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.NioSocketConnector;

public class MyClient {
	public static void main(String args[]){
		//create tcp/ip connector 
	IoConnector connector = new NioSocketConnector();
	//创建接受数据的过滤器
	DefaultIoFilterChainBuilder chain=connector.getFilterChain();
	//设定这个过滤器一行一行(/r/n)的读取数据
			chain.addLast("myChin", new ProtocolCodecFilter(new TextLineCodecFactory()));
			//或者如下			
			//connector.getFilterChain().addLast("codec",  new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8"),LineDelimiter.WINDOWS.getValue(),LineDelimiter.WINDOWS.getValue())));
	//设定服务器端的消息处理器:new 一个clinethandler对象
			connector.setHandler(new SamplMinaClientHandler());
	//set connect timeout		
	connector.setConnectTimeoutMillis(30000);
	//或者connector.setConnectTimeout(30);
	//连接到服务器
	ConnectFuture cf= connector.connect(new InetSocketAddress("localhost",9988));
	//wait for the connection attem to be finished
	cf.awaitUninterruptibly();
	cf.getSession().getCloseFuture().awaitUninterruptibly();
	connector.dispose();
	
	}

}
 

 

 

 

 

 

 

 

package client;

import org.apache.mina.core.service.IoHandler;
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.session.IoSession;

public class SamplMinaClientHandler extends IoHandlerAdapter implements
		IoHandler {

	@Override
	public void exceptionCaught(IoSession session, Throwable cause)
			throws Exception {
		// TODO Auto-generated method stub
		super.exceptionCaught(session, cause);
	}

	@Override
	public void messageReceived(IoSession session, Object message)
			throws Exception {
		//我们已经设定了服务器的解析消息,(规则是一行一行的读取。这里就可以转为String)
	String s=(String)message;
	// write the receive date back to remote peer
	System.out.println("服务器发来的收到信息"+s);
	session.write(s);
	}

	@Override
	public void messageSent(IoSession session, Object message) throws Exception {
		// TODO Auto-generated method stub
		super.messageSent(session, message);
	}

	@Override
	public void sessionClosed(IoSession session) throws Exception {
		// TODO Auto-generated method stub
	System.out.println("sessionClosed");
	}

	@Override
	public void sessionCreated(IoSession session) throws Exception {
		// TODO Auto-generated method stub
		super.sessionCreated(session);
	}

	@Override
	public void sessionIdle(IoSession session, IdleStatus status)
			throws Exception {
		// TODO Auto-generated method stub
		super.sessionIdle(session, status);
	}

	@Override
	public void sessionOpened(IoSession session) throws Exception {
		// TODO Auto-generated method stub
		System.out.println("incomming client"+session.getRemoteAddress());
		session.write("我来啦...");
	}
	
	

}
 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

mina 的一个简单例子    时间服务器,实现最基本功能

 

 

package server;

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.example.gettingstarted.timeserver.TimeServerHandler;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.filter.logging.LoggingFilter;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;

public class MinaTimeServer {
	
private static final int PORT=6489;
public static void main(String args[]) throws IOException{
	IoAcceptor acceptor= new NioSocketAcceptor();
	acceptor.getFilterChain().addLast("logger", new LoggingFilter());
	acceptor.getFilterChain().addLast("codec", new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8"))));
	acceptor.setHandler(new TimeServerHandler());
	acceptor.getSessionConfig().setReadBufferSize(2048);
	acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10);
	acceptor.bind(new InetSocketAddress(PORT));
	System.out.println("service start");
	
}

}
 

 

 

 

 

package server;

import java.sql.Date;

import org.apache.mina.core.service.IoHandler;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.session.IoSession;

public class TimeServerHandler implements IoHandler {

	public void exceptionCaught(IoSession session, Throwable cause)
			throws Exception {
		// TODO Auto-generated method stub
cause.printStackTrace();
	}

	public void messageReceived(IoSession session, Object message) throws Exception {
		// TODO Auto-generated method stub
 String strMsg= message.toString();
 if(strMsg.trim().equalsIgnoreCase("quit")){
	 session.close();
	 return;
 }
 Date date = new Date(0);
 session.write(date.toString());
System.out.println("message writen...");
 
	}

	public void messageSent(IoSession arg0, Object arg1) throws Exception {
		// TODO Auto-generated method stub

	}

	public void sessionClosed(IoSession arg0) throws Exception {
		// TODO Auto-generated method stub

	}

	public void sessionCreated(IoSession arg0) throws Exception {
		// TODO Auto-generated method stub

	}

	public void sessionIdle(IoSession session, IdleStatus status) throws Exception {
		  System.out.println("IDLE"+session.getIdleCount(status));  

	}

	public void sessionOpened(IoSession arg0) throws Exception {
		// TODO Auto-generated method stub

	}

}
 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值