天天看点

XMPP——Smack[1]连接、登陆及账户操作

临毕业前,应需求,花了三天写了个小的聊天工具,貌似简陋得很….若有机会再完善吧,目前毕业季,处理毕业事宜,还要准备即将的入职。

眼瞅着大学四年就这么结束了,哎。

开始吧,四篇博文简单介绍下基本实现,由于时间有限,功能不是十分丰富,有兴趣的同学自己研究下协议和具体的实现

需求:

基于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 plain copy print ?

  1. public static XMPPConnection getConnection(String domain) throws XMPPException {
  2. XMPPConnection connection = new XMPPConnection(domain);
  3. connection.connect();
  4. return connection;
  5. }
  6. public static XMPPConnection getConnection(String domain,int port) throws XMPPException {
  7. ConnectionConfiguration config = new ConnectionConfiguration(domain,port);
  8. XMPPConnection connection = new XMPPConnection(config);
  9. connection.connect();
  10. return connection;
  11. }

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("[email protected]", "*****");

五、账户操作

可以对账户进行基本操作,包括注册,注销,修改密码

[c-sharp] view plain copy print ?

  1. public static boolean createAccount(XMPPConnection connection,String regUserName,String regUserPwd)
  2. {
  3. try {
  4. connection.getAccountManager().createAccount(regUserName, regUserPwd);
  5. return true;
  6. } catch (Exception e) {
  7. return false;
  8. }
  9. }
  10. public static boolean deleteAccount(XMPPConnection connection)
  11. {
  12. try {
  13. connection.getAccountManager().deleteAccount();
  14. return true;
  15. } catch (Exception e) {
  16. return false;
  17. }
  18. }
  19. public static boolean changePassword(XMPPConnection connection,String pwd)
  20. {
  21. try {
  22. connection.getAccountManager().changePassword(pwd);
  23. return true;
  24. } catch (Exception e) {
  25. return false;
  26. }
  27. }

/** * 注册用户 * @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; } }

继续阅读