android xmpp

来源:互联网 发布:类似于prisma的软件 编辑:程序博客网 时间:2024/05/22 12:04

参考:
http://www.cnblogs.com/hanyonglu/archive/2012/03/04/2378956.html

1 xmpp是一种即时通讯协议.
2 xmpp定义了三种角色: 客户端,服务器,网关. 服务器管理信息的记录,连接的管理与信息的路由功能. 网关承担着异构系统的互联互通,例如: ICQ,MSN等.xmpp客户端的通讯必须经过服务器. 服务器通过地址
寻找目标服务器,连接目标客户端.
3 xmpp通过tcp协议,传输xml格式的指令.
4 xmpp 同一的JID地址格式:
用户名@域名/资源路径
5 xmpp常用标签 :

  <stream> 协议的开始  </stream> 协议的结束  <presence>用户 状态  <message> 信息的主体  <iq> 查询

6
XMPP应用示例

   举个例子看看所谓的XML流是什么样子的?  客户端:<?xml version='1.0'?>  <stream:stream  to='example_com'  xmlns='jabber:client'  xmlns:stream='http_etherx_jabber_org/streams'  version='1.0'>  服务器:<?xml version='1.0'?>  <stream:stream  from='example_com'  id='someid'  xmlns='jabber:client'  xmlns:stream='http_etherx_jabber_org/streams'  version='1.0'>  ...其他通信...  客户端:<message from='juliet_example_com'  to='romeo_example_net'  xml:lang='en'>  客户端: <body>Art thou not Romeo, and a Montague?</body>  客户端:</message>  服务器:<message from='romeo_example_net'  to='juliet_example_com'  xml:lang='en'>  服务器:<body>Neither, fair saint, if either thee dislike.</body>  服务器:</message>  客户端:</stream:stream>  服务器:</stream:stream> 

android 对xmpp的支持,需导入asmack.jar包

public class XmppTool {    /**     * 创建用户     * @param ip     * @param port     * @param name     * @param passwd     */    public static void createAccount(String ip,int port,String name,String passwd){        //制定链接参数        ConnectionConfiguration configuration=new ConnectionConfiguration(ip, port);        //实例化连接类        XMPPConnection connection=new XMPPConnection(configuration);        try {            //链接            connection.connect();            //实例化用户管理类             org.jivesoftware.smack.AccountManager  accountManager=connection.getAccountManager();             //创建用户             accountManager.createAccount(name, passwd);        } catch (XMPPException e) {            // TODO 自动生成的 catch 块            e.printStackTrace();        }    }    /**     * 登录     * @param ip     * @param port     * @param name     * @param passwd     * @return     */    public static XMPPConnection login(String ip,int port,String name,String passwd){        //制定链接参数        ConnectionConfiguration configuration=new ConnectionConfiguration(ip, port);        //实例化连接类        XMPPConnection connection=new XMPPConnection(configuration);        try {            //链接            connection.connect();            connection.login(name, passwd);            return connection;        } catch (XMPPException e) {            // TODO 自动生成的 catch 块            e.printStackTrace();        }        return null;    }    /**     * 使用户下线     * @param connection     */    public static void disconnect(XMPPConnection connection){        connection.disconnect();    }    /**     * 显示不在线     * @param connection     */    public static void unavailable(XMPPConnection connection){        //发送状态        Presence mPresence=new Presence(Presence.Type.unavailable);        connection.sendPacket(mPresence);    }    /**     * 添加联系人     * @param connection     * @param name  user@127.1.1.0     * @param nickname       * @param group  分组     */    public static void addFriend(XMPPConnection connection,                String name,String nickname,String[] group){        Roster roster=connection.getRoster();        try {            roster.createEntry(name,nickname, group);        } catch (XMPPException e) {            // TODO 自动生成的 catch 块            e.printStackTrace();        }    }    /**     * 删除好友     * @param connection     * @param name     */    public static void removeFriend(XMPPConnection connection,String name){        Roster roster=connection.getRoster();        try {            roster.removeEntry(roster.getEntry(name));        } catch (XMPPException e) {            // TODO 自动生成的 catch 块            e.printStackTrace();        }    }    /**     * 获取花名册     * @param connection     */    public static  Collection<RosterEntry> getRoster(XMPPConnection connection){        Roster roster=connection.getRoster();        return roster.getEntries();    }    /**     * 获取所有的状态     * @param connection     * @return     */    public static List<ItemStatus> getStatus(XMPPConnection connection){        Collection<RosterEntry> entries=getRoster(connection);        List<ItemStatus> itemStatus=new ArrayList<ItemStatus>();        for(RosterEntry entry:entries){            itemStatus.add(entry.getStatus());        }        return itemStatus;    }    /**     * 设置状态     * @param connection     * @param presence     */    public static void setStatus(XMPPConnection connection,Presence presence){        connection.sendPacket(presence);    }    /**     * 监听订阅的状态     * @param connection     */    public  static void addSubscribeListener(XMPPConnection connection,final subscribeListener slistener){        //状态监听        PacketFilter filter=new PacketTypeFilter(Presence.class);        PacketListener listener=new PacketListener() {            @Override            public void processPacket(Packet arg0) {                // TODO 自动生成的方法存根                Presence mPresence=(Presence) arg0;                if(mPresence.getType().equals(Presence.Type.subscribe)){                    Log.v("qin", "被订阅了");                    if(slistener!=null){                        slistener.subscribe();                    }                }else if(mPresence.getType().equals(Presence.Type.unsubscribe)){                    Log.v("qin", "取消订阅了.");                    if(slistener!=null){                        slistener.unsubscribe();                    }                }            }        };        connection.addPacketListener(listener, filter);    }    //状态监听器    public interface subscribeListener{          public void   subscribe();          public void unsubscribe();        }    /**     * 创建简单配置的聊天室     * @param connection     * @param name     * @param roomName     * @return     */    public static MultiUserChat InstantRooms(XMPPConnection connection,String name,String roomName){        //创建聊天室        MultiUserChat muc=new MultiUserChat(connection, name);        try {            muc.create(roomName);            //发送空表单配置            muc.sendConfigurationForm(new Form(Form.TYPE_SUBMIT));        } catch (XMPPException e) {            // TODO 自动生成的 catch 块            e.printStackTrace();        }        return muc;    }    /**     * 配置的聊天室     * @param connection     * @param name     * @param roomName     * @param ownername     * @return     */    public static MultiUserChat reservedRooms(XMPPConnection connection,                            String name,String roomName,String ownername){        MultiUserChat muc=new MultiUserChat(connection, name);        try {            muc.create(roomName);             Form form=muc.getConfigurationForm();             Form submit= form.createAnswerForm();             for(Iterator fields=form.getFields();fields.hasNext();){                      FormField field=(FormField) fields.next();                      if(FormField.TYPE_HIDDEN.equals(field.getType())                                && field.getVariable()!=null){                          submit.setDefaultAnswer(field.getVariable());                      }             }             List owners=new ArrayList();             owners.add(ownername);             submit.setAnswer("config", owners);             muc.sendConfigurationForm(submit);        } catch (XMPPException e) {            // TODO 自动生成的 catch 块            e.printStackTrace();        }        return muc;    }    /**     * 加入聊天室     * @param muc     * @param nickname     * @param passwd     */    public static void joinMuc(MultiUserChat muc,String nickname,String passwd){        try {            muc.join(nickname, passwd);        } catch (XMPPException e) {            // TODO 自动生成的 catch 块            e.printStackTrace();        }    }    /**     * 在聊天室发送消息     * @param muc     * @param msg     */    public static void sendMsgInMuc(MultiUserChat muc,String msg){        Message message=muc.createMessage();        message.setBody(msg);        try {            muc.sendMessage(message);        } catch (XMPPException e) {            // TODO 自动生成的 catch 块            e.printStackTrace();        }    }    /**     * 向某用户发送消息     * @param connection     * @param user     * @param message     */    public static void sendMessage(XMPPConnection connection,String user,String message){        ChatManager manager=connection.getChatManager();        Chat chat=manager.createChat(user, new MessageListener() {            @Override            public void processMessage(Chat arg0, Message arg1) {               Log.v("qin","打印接收到的消息:"+arg1);                           }        });        Message msg=new Message();        msg.setBody(message);        try {            //发送消息            chat.sendMessage(msg);        } catch (XMPPException e) {            // TODO 自动生成的 catch 块            e.printStackTrace();        }    }    /**     * 聊天室接受消息     * @param muc     * @param msg     */    public static void recieve(MultiUserChat muc,final processMsg msg){        muc.addMessageListener(new PacketListener() {            @Override            public void processPacket(Packet arg0) {                // TODO 自动生成的方法存根                String xml=arg0.toXML();                msg.process(xml);            }        });    }    /**     * 单个连接接受消息     * @param connection     */    public static void recieve(XMPPConnection connection,final processMsg msg){        connection.getChatManager().addChatListener(new ChatManagerListener() {            @Override            public void chatCreated(Chat chat, boolean local) {                //非本地发送                  if(!local){                      chat.addMessageListener(new MessageListener() {                        @Override                        public void processMessage(Chat arg0, Message arg1) {                            // TODO 自动生成的方法存根                            //接受到的消息                              msg.process(arg1.getBody());                        }                    });                  }            }        });    }    //处理消息    public interface processMsg{        public void process(String msg);    }}
0 0
原创粉丝点击