以前学习过用Scoket 建立聊天,简单的建立聊天是没问题的,但如果要实现多人复杂的聊天,后台服务器代码就比较复杂,对于我这新手来讲就比较难了。后来在网上看到用openfire做服务器,利用强大的Smack API库来实现IM聊天就简单多了。
网上也有很多关于这方面的资料,我就在这里把网上的资料和自己的理解总结一下和大家一起交流学习。
需要用到以下几个工具:
Openfire 最新版本(openfire 3.10.2)
下载地址:http://www.igniterealtime.org/downloads/index.jsp
安装配置可参考:http://www.cnblogs.com/hoojo/archive/2012/05/17/2506769.html
Smack 最新版本(Smack4.1.4,而我选用的Smack是3.0.4版本)
下载地址:http://www.igniterealtime.org/downloads/index.jsp
需要安装的安装好,需要下载的下载好(这里就不多作介绍)。创建项目工程,导入Smack jar包,OK,下面就一起去学习怎么获取 用户的相关信息(电子卡信息【VCard】)等一些功能!
首先第一、与服务器建立好连接
关键代码:zhou_pc为服务器IP,5222为服务器端口号
package com.openfire.util;
import org.jivesoftware.smack.ConnectionConfiguration;
import org.jivesoftware.smack.XMPPConnection;
public class SmackConnectionUtil {
private static XMPPConnection connection = null;
public static XMPPConnection getInstance(String serverName, int port) {
if (connection == null) {
ConnectionConfiguration config = new ConnectionConfiguration(serverName, port);
config.setSASLAuthenticationEnabled(false);
connection = new XMPPConnection(config);
}
return connection;
}
}
二、获取用户VCard信息
/**
* 获取用户VCard信息
*
* @param connection
* @param user
* @return
* @throws XMPPException
*/
public static VCard getUserVCard(XMPPConnection connection, String user,String password)
throws XMPPException {
connection.connect();
connection.login(user, password);
VCard vcard = new VCard();
vcard.load(connection, user+"@"+connection.getServiceName());
return vcard;
}
相关截图:
三、获取用户头像信息
/**
* 获取用户头像信息
*/
public static ImageIcon getUserImage(XMPPConnection connection, String user,String password) {
ImageIcon ic = null;
try {
System.out.println("获取用户头像信息: "+user);
connection.connect();
connection.login(user, password);
VCard vcard = new VCard();
vcard.load(connection, user+"@"+connection.getServiceName());
if(vcard == null || vcard.getAvatar() == null)
{
return null;
}
ByteArrayInputStream bais = new ByteArrayInputStream(
vcard.getAvatar());
Image image = ImageIO.read(bais);
ic = new ImageIcon(image);
System.out.println("图片大小:"+ic.getIconHeight()+" "+ic.getIconWidth());
} catch (Exception e) {
e.printStackTrace();
}
return ic;
}
相关截图:
源代码下载地址:OpenFire3.10.2+Smack3.0.4