Android开发之基于MINA框架的聊天通信功能实现

本文介绍了博主在Android项目中使用MINA框架实现点对点聊天功能的过程。由于项目需求简单,博主没有采用复杂的XMPP协议,而是自定义了一个简单的传输协议。由于公司资源有限,博主不仅负责Android客户端,还搭建了基于MINA的通信服务器。文章详细讲解了MINA服务端和客户端的开发,包括消息Handler的编写,特别提到了Android中处理中文消息的注意事项。文章末尾提供了DEMO下载链接。
摘要由CSDN通过智能技术生成

博主近端时间在做一个项目,里面有个需求需要实现点对点可选择聊天,就像一个QQ一样。但是需求又没那么高大尚。似乎就只是一个简单的聊天。网上找了很多信息,最后决定使用MINA框架来实现。现在的IM通讯协议有一个叫XMPP的,博主一看,好像项目需求不需要那么复杂,于是博主根据实际需要自己定了一个简单的传输协议来实现。项目之前用的是openfire,但是聊天只是一个其中一个基础功能,还有其他需求,而且openfire有各种限制,不支持JDK1.7等。于是只能放弃使用它,自己来写一个通信服务器了。博主是做Android开发的,服务器端理应该是做服务器的人负责,无奈公司人手不够,项目又催的紧,服务器端还有很多其他的业务需要那个专业的人去做,于是,博主只好硬着头皮上了。查看了一下好像OPENFIRE好像就是在MINA的框架上基于XMPP协议写出来的,于是博主果断就去研究了MINA框架,搞了那么2天,还真被博主搞出来了。好了,废话不说了,言归正传。


MINA框架,是Apache组织应用程序(Multipurpose Infrastructure for Network Applications) 是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利的框架。在这不在详细描述MINA框架的底层工作原理,直接进入实例开发,如果想看MINA框架的底层实现原理,请转接(博主就是看这篇文章学的):http://blog.csdn.net/w13770269691/article/details/8614584

一、MINA框架服务端开发

博主的项目的服务端是一个web项目,还有的业务,在这里博主将MINA框架部分剥离了出来,重新新建了一个项目。

1、MINA服务器编写:

package com.freedom.mina;

import java.io.IOException;
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;

/**
 * @ClassName: Server
 * @author victor_freedom (x_freedom_reddevil@126.com)
 * @createddate Dec 14, 2014 11:25:40 PM
 * @Description: TODO
 */
public class Server implements Runnable {
	private final Logger logger = Logger.getLogger(Server.class);
	public Thread start;

	public Server() {
		start = new Thread(this);
	}

	public void startService() {
		System.out.println("MINA启动");
		start.start();
	}
	
	public void stopService(){
		System.out.println("MINA停止");
		start.interrupt();
		
	}

	public void run() {
		IoAcceptor acceptor = new NioSocketAcceptor();

		acceptor.getFilterChain().addLast(
				"codec",
				new ProtocolCodecFilter(new TextLineCodecFactory(Charset
						.forName("UTF-8"), LineDelimiter.WINDOWS.getValue(),
						LineDelimiter.WINDOWS.getValue())));
		acceptor.setHandler(new ServerHandler());
		acceptor.getSessionConfig().setReadBufferSize(1024);
		acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10);

		try {
			acceptor.bind(new InetSocketAddress(9090));
		} catch (IOException e) {
			logger
					.error("Server start failed, Please check the network or port!");
		}
		logger.info("Server start up!");
	}
}

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值