android利用xmpp进行即时通信

简单介绍:什么是即时通信?类似于QQ聊天一样,不对,介绍理论不是我的风格,直接进入主题!


现在比较常用的软件是OpenFire做服务器,Spark做测试客户端(这是通用的,也有的公司是自己做的例如QQ)

下载地址:http://www.igniterealtime.org/downloads/index.jsp
OpenFire安装指导:http://www.tuicool.com/articles/bYfeAnU
设置OpenFire网址:http://127.0.0.1:9090 (这里也可以根据安装指导去做,但是我用的时候,有时会碰到OpenFire打不开的情况 )


需要的Jar包:

下载地址:http://download.csdn.net/detail/zhengyikuangge/9402975


①添加权限(AndroidMainfest.xml)

 <uses-permission android:name="android.permission.INTERNET" />

②连接OpenFire服务器和发送数据代码方法:

public static XMPPConnection conn;
//声明一个全局变量

public void send() throws XMPPException {
ConnectionConfiguration cc = new ConnectionConfiguration(
                "192.168.56.1", 5222);
                //第一个参数为IP地址,第二个参数为端口号
        conn = new XMPPConnection(cc);
        //创建连接对象
        conn.connect();
        //开始连接......
        conn.login("zhangwenqi", "154211");
        //账号和密码 在OpenFire中创建的账号和密码
        Chat chat = conn.getChatManager().createChat(
                "zhang" + "@" + conn.getServiceName()
                /*创建一个聊天窗口,‘zhang’是接收方的名
                字,conn.getServiceName()是服务器名字*/,
                 new MessageListener() {

                    @Override
                    public void processMessage(Chat arg0, Message arg1) {
                        // TODO Auto-generated method stub
                        Log.e("111", arg1.getBody() + "1542");
                        // 返回接收数据,重复接收
                    }
                });
        Message msg = new Message();
        msg.setBody("zwq");
        /* 注意这里的message是           
        org.jivesoftware.smack.packet.Message 
        是专门用于xmpp即时通讯使用的*/
        chat.sendMessage(msg);
        //发送数据
    }

③创建一个线程执行②中的方法即可。


这是费了一天的时间才研究出来的,多亏以前学过连接web服务器要不然今天是够呛啊,明天再研究研究然后再完善~~


安卓客户端实现在OpenFire服务器注册用户:

/** 
     * 注册 
     *  
     * @param account 注册帐号 
     * @param password 注册密码 
     * @return 1、注册成功 0、服务器没有返回结果2、这个账号已经存在3、注册失败 
     */
public String regist(String account, String password) {  
        if (conn == null)  
            return "0";  
        Registration reg = new Registration();  
        reg.setType(IQ.Type.SET);  
        reg.setTo(conn.getServiceName());  
// 注意这里createAccount注册时,参数是username,不是jid,是“@”前面的部分。  
        reg.setPassword(password);
        reg.addAttribute("android", "geolo_createUser_android");
        // 这边addAttribute不能为空,否则出错。 
        // 所以做个标志是android手机创建的吧!!!!!  
        PacketFilter filter = new AndFilter(new PacketIDFilter(  
                reg.getPacketID()), new PacketTypeFilter(IQ.class));  
        PacketCollector collector = conn.createPacketCollector(filter);  
        conn.sendPacket(reg);  
        IQ result = (IQ) collector.nextResult(SmackConfiguration  
                .getPacketReplyTimeout());  
        // Stop queuing results  
        collector.cancel();// 停止请求results(是否成功的结果)  
        if (result == null) {  
            Log.e("RegistActivity", "No response from server.");  
            return "0";  
        } else if (result.getType() == IQ.Type.RESULT) {  
            return "1";  
        } else { // if (result.getType() == IQ.Type.ERROR)  
            if (result.getError().toString().equalsIgnoreCase("conflict(409)")) {  
                Log.e("RegistActivity", "IQ.Type.ERROR: "  
                        + result.getError().toString());  
                return "2";  
            } else {  
                Log.e("RegistActivity", "IQ.Type.ERROR: "  
                        + result.getError().toString());  
                return "3";  
            }  
        }  
    }

这段代码的原地址:
http://blog.csdn.net/h7870181/article/details/8653865
感觉挺不错的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值