1#
原文的其中一篇

原文:http://blog.csdn.net/wklken/article/details/6460075

需求:
基于XMPP的IM工具,需实现和gtalk实现通信,需实现同spark的通信,需架设服务器,实现同自身客户端的通信,传文件,视频聊天

写完未实现需要改进的地方:离线消息,离线文件


一、XMPP
XMPP : The Extensible Messaging and Presence Protocol
中文全称:可扩展通讯和表示协议
简介:
可扩展通讯和表示协议 (XMPP) 可用于服务类实时通讯、表示和需求 - 响应服务中的 XML 数据元流式传输。XMPP 以 Jabber 协议为基础,而 Jabber 是即时通讯中常用的开放式协议。

二、Smack
    Smack是一个开源,易于使用的XMPP(jabber)客户端类库。
   Smack API, 是一个 Java 的XMPP Client Library,也是由Jive Software开发。 优点:编程简单。 缺点:API并非为大量并发用户设计,每个客户要1个线程,占用资源大,1台机器只能模拟有限(数千个)客户.
smack是一个用 java 写的XMPP客户端代码库, 是 spark 的核心.

二、连接及断开
基本方法
XMPPConnection connection = new XMPPConnection("gmail.com");
        connection.connect();
实现的方法



[java] view plaincopyprint?  
public static XMPPConnection getConnection(String domain) throws XMPPException {  
      
     XMPPConnection connection = new XMPPConnection(domain);  
     connection.connect();  
     return connection;  
}  
  
  
public static XMPPConnection getConnection(String domain,int port) throws XMPPException {  
     ConnectionConfiguration config = new ConnectionConfiguration(domain,port);  
     XMPPConnection connection = new XMPPConnection(config);  
     connection.connect();  
     return connection;  
}  



断开  
     connection.disconnect();
    
四、登陆
connection.login("javatest2011@gmail.com", "*****");


五、账户操作

   可以对账户进行基本操作,包括注册,注销,修改密码
[c-sharp] view plaincopyprint?  
/**
     * 注册用户
     * @param connection
     * @param regUserName
     * @param regUserPwd
     * @return
     */  
    public static boolean createAccount(XMPPConnection connection,String regUserName,String regUserPwd)  
    {  
        try {  
            connection.getAccountManager().createAccount(regUserName, regUserPwd);  
            return true;  
        } catch (Exception e) {  
            return false;  
        }  
    }  
      
    /**
     * 删除当前用户
     * @param connection
     * @return
     */  
    public static boolean deleteAccount(XMPPConnection connection)  
    {  
        try {  
            connection.getAccountManager().deleteAccount();  
          
            return true;  
        } catch (Exception e) {  
            return false;  
        }  
    }  
      
    /**
     * 删除修改密码
     * @param connection
     * @return
     */  
    public static boolean changePassword(XMPPConnection connection,String pwd)  
    {  
        try {  
            connection.getAccountManager().changePassword(pwd);  
          
            return true;  
        } catch (Exception e) {  
            return false;  
        }  
    }