`
独爱Java
  • 浏览: 32057 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Mina入门演示例子(简单登陆验证)

阅读更多
//包含四个类,客户端两个+服务器两个
//LoginClient.java,LoginClientHandler.java,LoginServer.java,LoginServerHandler.java

//login客户端代码
package com.mina.day3;

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

import org.apache.log4j.Logger;

import org.apache.mina.core.future.ConnectFuture;
import org.apache.mina.core.service.IoConnector;
import org.apache.mina.core.session.IoSession;

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 LoginClient {

	private static Logger logger = Logger.getLogger(LoginClient.class);
	private static String HOST = "127.0.0.1";
	private static int PORT = 3005;

	public static void main(String[] args) {
		IoConnector connector = new NioSocketConnector();
		connector.setConnectTimeoutMillis(3000);
		connector.getFilterChain().addLast("codec",
				new ProtocolCodecFilter(
						new TextLineCodecFactory(Charset.forName("UTF-8"), 
							LineDelimiter.WINDOWS.getValue(),
							LineDelimiter.WINDOWS.getValue())
						));

		connector.setHandler(new LoginClientHandler());
		IoSession session = null;
		
		try {
			ConnectFuture future = connector.connect(new InetSocketAddress(HOST, PORT));
			
			future.awaitUninterruptibly();
			session = future.getSession();
			session.write("admin,3");
		} catch (Exception e) {
			logger.error("connecting error...", e);
		}
		session.getCloseFuture().awaitUninterruptibly();
		connector.dispose();
	}
}

//客户端处理器代码
package com.mina.day3;

import org.apache.log4j.Logger;

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

public class LoginClientHandler extends IoHandlerAdapter {

	private static Logger logger = Logger.getLogger(LoginClientHandler.class);

	@Override
	public void messageReceived(IoSession session, Object message)
			throws Exception {
		 // message from server
		String msgFServer = message.toString();
		logger.info("client received msg = " + msgFServer);
	}

}

//服务器端LoginServer.java
package com.mina.day3;

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

import org.apache.log4j.Logger;

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 LoginServer {
	
	private static Logger logger = Logger.getLogger(LoginServer.class);
	private static int PORT = 3005;

	public static void main(String[] args) {
		IoAcceptor acceptor = null;
		try {
			acceptor = new NioSocketAcceptor(); 
			acceptor.getFilterChain().addLast("codec",
					new ProtocolCodecFilter(
							new TextLineCodecFactory(Charset.forName("UTF-8"),
								LineDelimiter.WINDOWS.getValue(),
								LineDelimiter.WINDOWS.getValue())
							));
			
			acceptor.getSessionConfig().setReadBufferSize(2048);
			acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10);
			
			acceptor.setHandler(new LoginServerHandler());
			
			acceptor.bind(new InetSocketAddress(PORT));
			logger.info("server startup ok,port = "+PORT);
		} catch (Exception e) {
			logger.error("server startup error...", e);
			e.printStackTrace();
		}
	}

}

//服务器处理器代码
package com.mina.day3;

import org.apache.log4j.Logger;

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

public class LoginServerHandler extends IoHandlerAdapter {

	public static Logger logger = Logger.getLogger(LoginServerHandler.class);

	@Override
	public void messageReceived(IoSession session, Object message)
			throws Exception {
		String resultMsg = message.toString();
		logger.info("server received msg = "+resultMsg);
		
		if ("bye".equals(resultMsg)) { 
			session.close(true);
		}
		
		//简单模拟业务逻辑处理
		String[] userInfo = resultMsg.split(",");
		String username = userInfo[0]; 
		String password = userInfo[1];
		
		if (username.equals("admin") && password.equals("3")) {
			session.write("login success...");
		} else {
			session.write("login error...");
		}
	}

	@Override
	public void messageSent(IoSession session, Object message) throws Exception {
		// longlived connection
		logger.info("message sent success...");
	}

}
3
1
分享到:
评论
4 楼 wslovenide 2012-07-04  
public class SHandler  extends IoHandlerAdapter{

	@Override
	public void messageReceived(IoSession session, Object message)
			throws Exception {
		
		System.out.println("服务器接收到的消息:"+message.toString());
		
		session.write("{code:1,desc:'成功'}\r\n");
		
		System.out.println("server side:");
	}
}

我写了打印的语句,但是运行过之后控制台没有打印出来,并且
session.write("{code:1,desc:'成功'}\r\n");
客户端可以接受到内容,也不知道是咋整的...
3 楼 wslovenide 2012-07-04  
不知为何,我的server端的handler的messageReceived方法接受不到客户端的消息呢。
2 楼 独爱Java 2012-04-21  
ciding 写道
也开始玩mina呢,哈哈。
最近开发的socket也是这方面的

我还在入门、希望多多分享
1 楼 ciding 2012-04-20  
也开始玩mina呢,哈哈。
最近开发的socket也是这方面的

相关推荐

Global site tag (gtag.js) - Google Analytics