`
独爱Java
  • 浏览: 32653 次
  • 性别: 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也是这方面的

相关推荐

    mina入门例子

    本入门例子将带你了解如何使用MINA进行基本的网络通信应用开发。 首先,MINA的核心概念包括`Session`、`Filter`和`Handler`。`Session`代表一个网络连接,它是数据传输的通道;`Filter`是处理`Session`中数据的...

    Apache Mina入门(完成版)

    4. **实战项目**:“minatest”可能是包含示例代码或一个简单的Mina应用项目,供学习者实践操作,理解Mina在实际项目中的应用。这个项目可能包含了服务器端和客户端的代码,演示了如何建立连接、发送和接收数据。 5...

    mina入门实例

    本入门实例将带你了解如何使用Mina进行基本的网络通信。 首先,我们从环境配置开始。这个实例要求使用Maven作为项目构建工具,因此你需要确保已经安装了Maven,并且在项目中设置了正确的`pom.xml`文件。在`pom.xml`...

    Mina入门:mina版之HelloWorld

    通过这个简单的“HelloWorld”例子,我们对Mina有了初步的了解,掌握了如何创建服务器和客户端,并实现了基本的通信功能。在深入学习Mina时,可以进一步研究它的高级特性,如线程模型、缓冲区管理、心跳机制等,这些...

    Apache Mina 入门Demo

    Mina的目标是简化网络编程,使其与处理I/O操作一样简单。 在"Apache Mina 入门Demo"中,我们可以期待学习以下几个核心知识点: 1. **Mina架构**:Apache Mina的核心设计基于事件驱动和非阻塞I/O模型,这种模型特别...

    apache-mina例子

    这个例子是关于如何使用Apache Mina实现一个简单的服务端和客户端通信的示例。在这个案例中,`MinaTimeServer`是服务端程序,它负责监听客户端的连接请求,并发送时间信息;而`MinaClient`则是客户端程序,它连接到...

    mina源码+例子mina-2.0.0-M6.zip

    3. **编写简单的应用**:从例子入手,创建一个简单的MINA服务器和客户端,理解它们之间的通信机制。 4. **实现自定义过滤器**:根据需求,编写自定义的过滤器,以实现特定的数据处理功能。 5. **性能调优**:了解...

    MINA源码与例子

    MINA的目标是为开发者提供一个简单易用但功能强大的库,使得他们能够构建网络应用,如TCP/IP和UDP协议的服务器和客户端,而无需深入理解底层网络编程的复杂性。 MINA的核心设计理念是基于非阻塞I/O(Non-blocking I...

    Mina官网例子之时间服务器

    在这个例子中,我们将深入探讨Mina的"时间服务器",它是一个简单的应用,展示了如何使用Mina来创建一个能响应客户端查询当前系统时间的服务器。 **1. Mina基础概念** - **I/O模型**:Mina基于非阻塞I/O(NIO)模型...

    mina 服务器开发例子

    接下来,我们来看看如何创建一个简单的Mina服务器。首先,我们需要引入Mina的依赖库。在Maven项目中,可以在pom.xml文件中添加如下依赖: ```xml <groupId>org.apache.mina <artifactId>mina-core <version>...

    Mina框架入门介绍

    `IoFilter`是Mina事件处理链的一部分,允许开发者在数据传输前或后添加额外的处理逻辑,例如数据加密、解压缩或验证。过滤器可以串联起来,形成一个过滤器链,数据在到达IoHandler之前会经过这些过滤器。 `IoFilter...

    Mina例子包含与spring整合

    5. **MinaExample项目**:这个项目可能包含了一个或多个示例,演示了如何在Spring环境中配置和启动一个MINA服务器,以及如何创建MINA客户端。可能涉及的文件包括配置文件(如`applicationContext.xml`),MINA的服务...

    mina通讯例子

    此外,MINA支持多种传输协议,如TCP/IP、UDP/IP、SSL/TLS等,这使得MINA不仅限于简单的对象传输,还可以应用于各种复杂网络应用场景,如FTP服务器、聊天应用、游戏服务器等。 为了运行这个例子,你需要配置MINA的...

    mina权威性能测试例子

    这个"mina权威性能测试例子"是针对Apache Mina的一个实际性能测试案例,旨在展示在特定环境下Mina如何处理大量并发连接。在这个测试中,四台客户端机器同时对服务器进行压力测试,结果显示服务器可以轻松地处理一万...

    mina消息推送例子

    在这个“mina消息推送例子”中,我们将深入探讨Mina如何实现消息推送,并结合Spring框架进行集成。 首先,Apache Mina提供了一个异步事件驱动的网络应用编程接口(API),它简化了TCP/IP和UDP协议的处理,如HTTP、...

    Mina实现RPC的例子

    总之,Apache Mina提供了一种灵活且高效的方式来实现RPC,它的事件驱动模型和强大的过滤器框架使得构建网络服务变得更加简单。在实际开发中,可以根据具体需求调整和扩展这些基础架构,以满足不同场景下的性能和功能...

    Apache MINA java UDP例子|byte数组

    最近做rfid读写,C#和java都用udp不用厂家的动态库,udp自己写也简单,但是试了一下Apache mina ,接收的不是string,二十byte[] 数组,简单实现了UDP,网上也有例子,但是不是我要的。可用。

    MINA for android例子

    Apache MINA是一个网络应用程序框架,本实例在android下 进行串口通讯的例子

Global site tag (gtag.js) - Google Analytics