浩方聊天工具怎么关闭离怎么打出那个马呢

最安全的绿色软件下载基地!
扫码浏览手机端页面
热门搜索:
您的位置:
腾讯qq聊天软件下载 2014 官方最新版
网友评分:9.8 分
软件星级:
软件大小:55M
软件语言:简体中文
软件分类:聊天工具
软件授权:免费软件
更新时间:
软件类别:国产软件
软件官网:/
应用平台:Win All
软件标签:
qq聊天软件下载 2014 官方最新版
高速下载通道:其它下载通道:
可能感兴趣的软件
(您的评论需要经过审核才能显示)
共0人参与,0条评论
53.2M / 简体中文 / 6.826.5M / 简体中文 / 9.934.3M / 简体中文 / 9.617.9M / 简体中文 / 9.629.6M / 简体中文 / 6.814.5M / 简体中文 / 6.96.7M / 多国语言[中文] / 9.8
分类下载排行
01QQ微信电脑客户端 2015 PC模拟版01聊天工具 / 110M02YY视听电脑版下载 1.4.3 最新版02聊天工具 / 11.7M03康福中国(CF聊天室)V6.7 官方最新版03聊天工具 / 9M04陌陌电脑版官方下载 v6.5.3 官网最新版04聊天工具 / 28.9M05微信对话生成器破解版 2.0 爆破版05聊天工具 / 3M06百分百QQ全能营销软件
专业破解版06聊天工具 / 4.3M07我的生活in记电脑版下载 v2.8.1 绿色版07聊天工具 / 202KB08葫芦侠3楼电脑版(附***方法) v3.5.0.25 官网最新版08聊天工具 / 9.4M09飞信2013官方下载 v5.5.0 电脑版09聊天工具 / 37.3M10飞鸽传书2007下载 绿色版10聊天工具 / 85KB
01QQ微信电脑客户端 2015 PC模拟版01聊天工具 / 110M02YY视听电脑版下载 1.4.3 最新版02聊天工具 / 11.7M03陌陌电脑版官方下载 v6.5.3 官网最新版03聊天工具 / 28.9M04微信对话生成器破解版 2.0 爆破版04聊天工具 / 3M05百分百QQ全能营销软件
专业破解版05聊天工具 / 4.3M06康福中国(CF聊天室)V6.7 官方最新版06聊天工具 / 9M07我的生活in记电脑版下载 v2.8.1 绿色版07聊天工具 / 202KB08葫芦侠3楼电脑版(附***方法) v3.5.0.25 官网最新版08聊天工具 / 9.4M09飞信2013官方下载 v5.5.0 电脑版09聊天工具 / 37.3M10飞鸽传书2007下载 绿色版10聊天工具 / 85KB
起点软件 - 所有软件均来自网络如有版权问题请联系我们 - 浙ICP备号
Copyright & 2004- online services. All rights reserved.
请简要描述您遇到的错误,我们将尽快予以修订聊天工具有那些_百度知道一天时间用OpenFire打造自己的IM聊天工具一天时间用OpenFire打造自己的IM聊天工具
围观4206次
编辑日期: 字体:
Openfire 采用Java开发,开源的实时协作(RTC)服务器基于XMPP(Jabber)协议。Openfire***和使用都非常简单,并利用Web进行管理。单台服务器可支持上万并发用户。好友界面功能界面聊天界面服务端可以用本服务器测试,地址:。如果想自己搭可在本博客其它XMPP文章找到相关搭建资料。实现了用户注册,登录,添加好友,聊天核心功能。可正常聊天!核心通讯代码:
package com.lee.xqq.
import java.io.ByteArrayInputS
import java.util.ArrayL
import java.util.C
import java.util.I
import java.util.L
import org.jivesoftware.smack.C
import org.jivesoftware.smack.ConnectionC
import org.jivesoftware.smack.ConnectionCreationL
import org.jivesoftware.smack.ConnectionL
import org.jivesoftware.smack.PacketC
import org.jivesoftware.smack.PacketL
import org.jivesoftware.smack.R
import org.jivesoftware.smack.RosterE
import org.jivesoftware.smack.RosterG
import org.jivesoftware.smack.SmackC
import org.jivesoftware.smack.XMPPC
import org.jivesoftware.smack.XMPPE
import org.jivesoftware.smack.filter.AndF
import org.jivesoftware.smack.filter.PacketF
import org.jivesoftware.smack.filter.PacketIDF
import org.jivesoftware.smack.filter.PacketTypeF
import org.jivesoftware.smack.packet.IQ;
import org.jivesoftware.smack.packet.M
import org.jivesoftware.smack.packet.P
import org.jivesoftware.smack.packet.P
import org.jivesoftware.smack.packet.Presence.T
import org.jivesoftware.smack.packet.R
import org.jivesoftware.smack.provider.PrivacyP
import org.jivesoftware.smack.provider.ProviderM
import org.jivesoftware.smack.util.StringU
import org.jivesoftware.smackx.F
import org.jivesoftware.smackx.GroupChatI
import org.jivesoftware.smackx.PrivateDataM
import org.jivesoftware.smackx.ReportedD
import org.jivesoftware.smackx.ReportedData.R
import org.jivesoftware.smackx.bytestreams.socks5.provider.BytestreamsP
import org.jivesoftware.smackx.packet.ChatStateE
import org.jivesoftware.smackx.packet.LastA
import org.jivesoftware.smackx.packet.OfflineMessageI
import org.jivesoftware.smackx.packet.OfflineMessageR
import org.jivesoftware.smackx.packet.SharedGroupsI
import org.jivesoftware.smackx.packet.VC
import org.jivesoftware.smackx.provider.AdHocCommandDataP
import org.jivesoftware.smackx.provider.DataFormP
import org.jivesoftware.smackx.provider.DelayInformationP
import org.jivesoftware.smackx.provider.DiscoverInfoP
import org.jivesoftware.smackx.provider.DiscoverItemsP
import org.jivesoftware.smackx.provider.MUCAdminP
import org.jivesoftware.smackx.provider.MUCOwnerP
import org.jivesoftware.smackx.provider.MUCUserP
import org.jivesoftware.smackx.provider.MessageEventP
import org.jivesoftware.smackx.provider.MultipleAddressesP
import org.jivesoftware.smackx.provider.RosterExchangeP
import org.jivesoftware.smackx.provider.StreamInitiationP
import org.jivesoftware.smackx.provider.VCardP
import org.jivesoftware.smackx.provider.XHTMLExtensionP
import org.jivesoftware.smackx.search.UserS
import org.jivesoftware.smackx.search.UserSearchM
import android.graphics.drawable.BitmapD
import android.graphics.drawable.D
import com.lee.xqq.ChatA
import com.lee.xqq.MainA
import com.lee.xqq.SplashA
import com.lee.xqq.base.BroadS
import com.lee.xqq.base.ML
import com.lee.xqq.item.XUserI
import com.lee.xqq.net.HttpR
import com.lee.xqq.net.HttpU
import com.lee.xqq.util.CachedThreadP
* 所有的数据控制,逻辑可以在这里实现
public class DataUtils implements ConnectionListener,
ConnectionCreationListener, PacketListener {
private static DataU
private static S
private DataUtils() {
public void setHost(String host, int port) {
DataUtils.host =
DataUtils.port =
public static DataUtils getInstance() {
if (instance == null)
instance = new DataUtils();
public Connection getConnection() {
public String getUser() {
public void requestBaidu() {
CachedThreadPool.execute(new Runnable() {
public void run() {
// TODO Auto-generated method stub
HttpUtil httpUtil = HttpUtil.requestText(
&&, &GET&);
HttpResult result = httpUtil.getResponse();
if (result.getCode() == 200) {
// 向界面发送接收广播
public void initXMPP() {
CachedThreadPool.execute(new Runnable() {
public void run() {
// TODO Auto-generated method stub
connectXmppServer();
private void connectXmppServer() {
ConnectionConfiguration config = new ConnectionConfiguration(host, port);
/** 是否启用安全验证 */
config.setSASLAuthenticationEnabled(false);
config.setReconnectionAllowed(true);// 断线重连
/** 是否启用调试 */
// config.setDebuggerEnabled(true);
/** 创建connection链接 */
Connection.addConnectionCreationListener(this);
configure(ProviderManager.getInstance());
connection = new XMPPConnection(config);
/** 建立连接 */
connection.connect();
connection.addConnectionListener(this);
PacketTypeFilter filter = new PacketTypeFilter(Packet.class);
connection.addPacketListener(this, filter);
} catch (XMPPException e) {
e.printStackTrace();
MLog.makeText(&服务器连接失败&);
* Android读不到/META-INF下的配置文件,需要手工配置。
* @param pm
private void configure(ProviderManager pm) {
// Private Data Storage
pm.addIQProvider(&query&, &jabber:iq:private&,
new PrivateDataManager.PrivateDataIQProvider());
pm.addIQProvider(&query&, &jabber:iq:time&,
Class.forName(&org.jivesoftware.smackx.packet.Time&));
} catch (ClassNotFoundException e) {
e.printStackTrace();
// Roster Exchange
pm.addExtensionProvider(&x&, &jabber:x:roster&,
new RosterExchangeProvider());
// Message Events
pm.addExtensionProvider(&x&, &jabber:x:event&,
new MessageEventProvider());
// Chat State
pm.addExtensionProvider(&active&,
&http://jabber.org/protocol/chatstates&,
new ChatStateExtension.Provider());
pm.addExtensionProvider(&composing&,
&http://jabber.org/protocol/chatstates&,
new ChatStateExtension.Provider());
pm.addExtensionProvider(&paused&,
&http://jabber.org/protocol/chatstates&,
new ChatStateExtension.Provider());
pm.addExtensionProvider(&inactive&,
&http://jabber.org/protocol/chatstates&,
new ChatStateExtension.Provider());
pm.addExtensionProvider(&gone&,
&http://jabber.org/protocol/chatstates&,
new ChatStateExtension.Provider());
pm.addExtensionProvider(&html&, &http://jabber.org/protocol/xhtml-im&,
new XHTMLExtensionProvider());
// Group Chat Invitations
pm.addExtensionProvider(&x&, &jabber:x:conference&,
new GroupChatInvitation.Provider());
// Service Discovery # Items
pm.addIQProvider(&query&, &http://jabber.org/protocol/disco#items&,
new DiscoverItemsProvider());
// Service Discovery # Info
pm.addIQProvider(&query&, &http://jabber.org/protocol/disco#info&,
new DiscoverInfoProvider());
// Data Forms
pm.addExtensionProvider(&x&, &jabber:x:data&, new DataFormProvider());
// MUC User
pm.addExtensionProvider(&x&, &http://jabber.org/protocol/muc#user&,
new MUCUserProvider());
// MUC Admin
pm.addIQProvider(&query&, &http://jabber.org/protocol/muc#admin&,
new MUCAdminProvider());
// MUC Owner
pm.addIQProvider(&query&, &http://jabber.org/protocol/muc#owner&,
new MUCOwnerProvider());
// Delayed Delivery
pm.addExtensionProvider(&x&, &jabber:x:delay&,
new DelayInformationProvider());
// Version
pm.addIQProvider(&query&, &jabber:iq:version&,
Class.forName(&org.jivesoftware.smackx.packet.Version&));
} catch (ClassNotFoundException e) {
// Not sure what's happening here.
e.printStackTrace();
pm.addIQProvider(&vCard&, &vcard-temp&, new VCardProvider());
// Offline Message Requests
pm.addIQProvider(&offline&, &http://jabber.org/protocol/offline&,
new OfflineMessageRequest.Provider());
// Offline Message Indicator
pm.addExtensionProvider(&offline&,
&http://jabber.org/protocol/offline&,
new OfflineMessageInfo.Provider());
// Last Activity
pm.addIQProvider(&query&, &jabber:iq:last&, new LastActivity.Provider());
// User Search
pm.addIQProvider(&query&, &jabber:iq:search&, new UserSearch.Provider());
// SharedGroupsInfo
pm.addIQProvider(&sharedgroup&,
&http://www.jivesoftware.org/protocol/sharedgroup&,
new SharedGroupsInfo.Provider());
// JEP-33: Extended Stanza Addressing
pm.addExtensionProvider(&addresses&,
&http://jabber.org/protocol/address&,
new MultipleAddressesProvider());
// FileTransfer
pm.addIQProvider(&si&, &http://jabber.org/protocol/si&,
new StreamInitiationProvider());
pm.addIQProvider(&query&, &http://jabber.org/protocol/bytestreams&,
new BytestreamsProvider());
// Privacy
pm.addIQProvider(&query&, &jabber:iq:privacy&, new PrivacyProvider());
pm.addIQProvider(&command&, &http://jabber.org/protocol/commands&,
new AdHocCommandDataProvider());
pm.addExtensionProvider(&malformed-action&,
&http://jabber.org/protocol/commands&,
new AdHocCommandDataProvider.MalformedActionError());
pm.addExtensionProvider(&bad-locale&,
&http://jabber.org/protocol/commands&,
new AdHocCommandDataProvider.BadLocaleError());
pm.addExtensionProvider(&bad-payload&,
&http://jabber.org/protocol/commands&,
new AdHocCommandDataProvider.BadPayloadError());
pm.addExtensionProvider(&bad-sessionid&,
&http://jabber.org/protocol/commands&,
new AdHocCommandDataProvider.BadSessionIDError());
pm.addExtensionProvider(&session-expired&,
&http://jabber.org/protocol/commands&,
new AdHocCommandDataProvider.SessionExpiredError());
public boolean register(String account, String password) {
Registration reg = new Registration();
reg.setType(IQ.Type.SET);
reg.setTo(connection.getServiceName());
reg.setUsername(account);// 注意这里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 = connection.createPacketCollector(filter);
connection.sendPacket(reg);
IQ result = (IQ) collector.nextResult(SmackConfiguration
.getPacketReplyTimeout());
if (result == null) {
MLog.makeText(&连接超时&);
} else if (result.getType() == IQ.Type.RESULT) {
MLog.makeText(&注册成功&);
MLog.makeText(result.getError().toString());
public boolean login(String userName, String userPwd) {
connection.login(userName, userPwd);
user = userName + &@& + connection.getServiceName();
} catch (Exception e) {
e.printStackTrace();
MLog.makeText(&登录失败&);
public void changePassword(String pwd) {
connection.getAccountManager().changePassword(pwd);
} catch (Exception e) {
e.printStackTrace();
* 更改用户状态
public void setPresence(int code) {
Presence presence =
switch (code) {
presence = new Presence(Presence.Type.available);
connection.sendPacket(presence);
MLog.makeText(&设置在线&);
presence = new Presence(Presence.Type.available);
presence.setMode(Presence.Mode.chat);
connection.sendPacket(presence);
MLog.makeText(&设置Q我吧&);
presence = new Presence(Presence.Type.available);
presence.setMode(Presence.Mode.dnd);
connection.sendPacket(presence);
MLog.makeText(&设置忙碌&);
presence = new Presence(Presence.Type.available);
presence.setMode(Presence.Mode.away);
connection.sendPacket(presence);
MLog.makeText(&设置离开&);
Roster roster = connection.getRoster();
Collection&RosterEntry& entries = roster.getEntries();
for (RosterEntry entry : entries) {
presence = new Presence(Presence.Type.unavailable);
presence.setPacketID(Packet.ID_NOT_***AILABLE);
presence.setFrom(connection.getUser());
presence.setTo(entry.getUser());
connection.sendPacket(presence);
// 向同一用户的其他客户端发送隐身状态
presence = new Presence(Presence.Type.unavailable);
presence.setPacketID(Packet.ID_NOT_***AILABLE);
presence.setFrom(connection.getUser());
presence.setTo(StringUtils.parseBareAddress(connection.getUser()));
connection.sendPacket(presence);
MLog.makeText(&设置隐身&);
presence = new Presence(Presence.Type.unavailable);
connection.sendPacket(presence);
MLog.makeText(&设置离线&);
public void logoutAccount() {
connection.getAccountManager().deleteAccount();
} catch (Exception e) {
e.printStackTrace();
public Collection&RosterGroup& getGroups() {
return connection.getRoster().getGroups();
public List&RosterEntry& getEntriesByGroup(String groupName) {
List&RosterEntry& Entrieslist = new ArrayList&RosterEntry&();
RosterGroup rosterGroup = connection.getRoster().getGroup(groupName);
Collection&RosterEntry& rosterEntry = rosterGroup.getEntries();
Iterator&RosterEntry& i = rosterEntry.iterator();
while (i.hasNext()) {
Entrieslist.add(i.next());
public Drawable getUserImage(String user) {
ByteArrayInputStream bais =
VCard vcard = new VCard();
// 加入这句代码,解决No VCard for
ProviderManager.getInstance().addIQProvider(&vCard&, &vcard-temp&,
new org.jivesoftware.smackx.provider.VCardProvider());
if (user == && || user == null || user.trim().length() &= 0) {
vcard.load(connection, user + &@& + connection.getServiceName());
if (vcard == null || vcard.getAvatar() == null)
bais = new ByteArrayInputStream(vcard.getAvatar());
BitmapDrawable drawable = new BitmapDrawable(bais);
bais.close();
} catch (Exception e) {
e.printStackTrace();
public List&RosterEntry& getAllEntries() {
List&RosterEntry& Entrieslist = new ArrayList&RosterEntry&();
Collection&RosterEntry& rosterEntry = connection.getRoster()
.getEntries();
Iterator&RosterEntry& i = rosterEntry.iterator();
while (i.hasNext()) {
Entrieslist.add(i.next());
public boolean addGroup(String groupName) {
connection.getRoster().createGroup(groupName);
MLog.makeText(&创建成功&);
} catch (Exception e) {
e.printStackTrace();
* 添加好友 无分组
* @param userName
* @param name
public boolean addUser(String userName, String name) {
String account = userName + &@& + connection.getServiceName();
connection.getRoster().createEntry(account, name, null);
} catch (Exception e) {
e.printStackTrace();
public boolean addUserWithName(String userName, String name,
Presence.Type type) {
return addUserWithName(userName, name, XMsgConst.X_DEFAULT_GROUP, type);
* 添加好友 有分组
* @param userName
* @param name
* @param groupName
public boolean addUserWithName(String userName, String name,
String groupName, Presence.Type type) {
Presence subscription = new Presence(type);
subscription.setTo(userName);
userName += &@& + connection.getServiceName();
connection.sendPacket(subscription);
if (type == Type.subscribed)
connection.getRoster().createEntry(userName, name,
new String[] { groupName });
} catch (Exception e) {
e.printStackTrace();
public boolean removeUser(String userName) {
RosterEntry entry =
if (userName.contains(&@&))
entry = connection.getRoster().getEntry(userName);
entry = connection.getRoster().getEntry(
userName + &@& + connection.getServiceName());
if (entry == null)
entry = connection.getRoster().getEntry(userName);
connection.getRoster().removeEntry(entry);
} catch (Exception e) {
e.printStackTrace();
public List&XUserItem& searchUsers(String userName) {
List&XUserItem& results = new ArrayList&XUserItem&();
UserSearchManager usm = new UserSearchManager(connection);
String serverDomain = &search.& + connection.getServiceName();
Form searchForm = usm.getSearchForm(serverDomain);
Form answerForm = searchForm.createAnswerForm();
answerForm.setAnswer(&Username&, true);
answerForm.setAnswer(&search&, userName);
ReportedData data = usm.getSearchResults(answerForm, serverDomain);
Iterator&Row& it = data.getRows();
XUserItem user =
while (it.hasNext()) {
row = it.next();
String uName = row.getValues(&Username&).next().toString();
String Name = row.getValues(&Name&).next().toString();
String Email = row.getValues(&Email&).next().toString();
user = new XUserItem(uName, Name, Email);
results.add(user);
} catch (XMPPException e) {
// TODO Auto-generated catch block
e.printStackTrace();
public void sendMessage(String toJID, String message) {
// TODO Auto-generated method stub
final Message newMessage = new Message(toJID, Message.Type.chat);
newMessage.setBody(message);
connection.sendPacket(newMessage);
public void connectionClosed() {
// TODO Auto-generated method stub
MLog.makeText(&连接已关闭&);
public void connectionClosedOnError(Exception arg0) {
// TODO Auto-generated method stub
MLog.makeText(&连接关闭异常&);
arg0.printStackTrace();
public void reconnectingIn(int arg0) {
// TODO Auto-generated method stub
MLog.makeText(&reconnectingIn:& + arg0);
public void reconnectionFailed(Exception arg0) {
// TODO Auto-generated method stub
MLog.makeText(&连接失败&);
arg0.printStackTrace();
public void reconnectionSuccessful() {
// TODO Auto-generated method stub
MLog.makeText(&重连成功&);
public void connectionCreated(Connection arg0) {
// TODO Auto-generated method stub
BroadSender.sendBroadcast(SplashActivity.class);
public void processPacket(Packet packet) {
// TODO Auto-generated method stub
if (packet instanceof Message) {
Message msg = (Message)
CacheUtils.getInstance().addMessage(msg);
BroadSender.sendBroadcast(ChatActivity.class, &action&,
XMsgConst.X_PACKET_TYPE_MESSAGE);
} else if (packet instanceof Presence) {
Presence presence = (Presence)
String from = presence.getFrom();// 发送方
String to = presence.getTo();// 接收方
Type type = presence.getType();
int typeValue = 0;
if (type.equals(Presence.Type.subscribe)) {
// 好友申请
typeValue = XMsgConst.X_PRESENCE_SUBSCRIBE;
} else if (type.equals(Presence.Type.subscribed)) {
// 同意添加好友
typeValue = XMsgConst.X_PRESENCE_SUBSCRIBED;
} else if (type.equals(Presence.Type.unsubscribe)) {
// 拒绝添加好友
typeValue = XMsgConst.X_PRESENCE_UNSUBSCRIBE;
} else if (type.equals(Presence.Type.unsubscribed)) {
// 删除好友
typeValue = XMsgConst.X_PRESENCE_UNSUBSCRIBED;
} else if (type.equals(Presence.Type.unavailable)) {
// 好友下线
typeValue = XMsgConst.X_PRESENCE_UN***AILABLE;
from = processFrom(from);
CacheUtils.getInstance().putPresence(from, presence);
// 好友上线
typeValue = XMsgConst.X_PRESENCE_ONLINE;
from = processFrom(from);
CacheUtils.getInstance().putPresence(from, presence);
String[] params = new String[] { &action&,
XMsgConst.X_PACKET_TYPE_PRESENCE, &type&,
String.valueOf(typeValue), &from&, from, &to&, to };
BroadSender.sendBroadcast(MainActivity.class, params);
* 去掉多余的服务器字符串
* @param from
private String processFrom(String from) {
int endPos = from.lastIndexOf(&/&);
if (endPos != -1)
from = from.substring(0, endPos);
本文固定链接: 转载请注明:
作者:leehom本博客主要是把自己的经验记录于此,方便自己以后查阅及其他遇到类似问题的朋友参考。如果你有觉得不错的文章,可以注册会员发布文章或者邮箱发给我文章地址,谢谢!
如果觉得文章还不错,请麻烦点下广告,算是赞助下本站服务器费用,谢谢! ,,
您可能还会对这些文章感兴趣!

参考资料

 

随机推荐