生活随笔
收集整理的這篇文章主要介紹了
smark和openfire即时通信代码
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
從:http://blog.csdn.net/casuallc/article/details/34794501
server:openfire
client計(jì)劃:smark寫(xiě)
首先安裝openfire,下載client直接安裝就可以。數(shù)據(jù)庫(kù)能夠用openfire自身的,也能夠用自己的數(shù)據(jù)庫(kù),僅僅要按提示設(shè)置好參數(shù)就可以
之后,就能夠用smark寫(xiě)一個(gè)client測(cè)試與openfire的通信了(須要引進(jìn)的jar包除了smark自身的。還要引入xmlpull-1.1.3.1.jar、kxml2-2.3.0.jar兩個(gè)包
? ? ,作用是解析xml文件)
備注:我用的smark版本號(hào)是4.0。要引入的基本包有smack-core-4.0.0.jar、smack-debug-4.0.0.jar、smack-extensions-4.0.0.jar、smack-tcp-4.0.0.jar
debug包使用來(lái)調(diào)試的。tcp是用來(lái)初始化連接的、extension包里面含有發(fā)送離線消息、文件等類
以下是創(chuàng)建一個(gè)連接
[java] view plaincopy
ConnectionConfiguration?config?=?new?ConnectionConfiguration("ip",?5222);????????????config.setSecurityMode(SecurityMode.disabled);????????????config.setDebuggerEnabled(true);????????????config.setSendPresence(false);????????????XMPPConnection?conn?=?new?XMPPTCPConnection(config);????????????conn.setPacketReplyTimeout(5000);??????conn.connect();????????????conn.login("admin",?"0",?"資源名");?? 關(guān)于連接的參數(shù),在新版本號(hào)中所有在config中設(shè)置
發(fā)送消息
[html] view plaincopy
private?void?testSendMessage(XMPPConnection?conn)?throws?Exception?{??????????//jid在數(shù)據(jù)表中ofroster能夠查到。通常是???username@server名稱??????????Chat?chat?=?ChatManager.getInstanceFor(conn).createChat("ly@192.168.1.100",?new?MessageListener()?{??????????????@Override??????????????public?void?processMessage(Chat?chat,?Message?message)?{??????????????????System.out.println("Received?message:?"?+?message);??????????????}??????????});??????????Message?msg?=?new?Message();??????????msg.setBody("hello?world");??????????//定義成normal,在對(duì)象不在線時(shí)發(fā)送離線消息。消息存放在數(shù)據(jù)表ofoffline中??????????msg.setType(Message.Type.normal);??????????//發(fā)送消息。參數(shù)能夠是字符串,也能夠是message對(duì)象??????????chat.sendMessage(msg);??????????//發(fā)送廣播??????????conn.sendPacket(msg);??????}?? 發(fā)送離線消息
[java] view plaincopy
private?void?testOffLine(XMPPConnection?conn)?throws?Exception?{????????????OfflineMessageManager?offMM?=?new?OfflineMessageManager(conn);??????System.out.println("離線文件數(shù)量?:"?+?offMM.getMessageCount());??????System.out.println("離線文件內(nèi)容?:");??????????????????List<Message>?listMessage?=?offMM.getMessages();????????????System.out.println(listMessage.size());??????for(Message?m?:?offMM.getMessages())?{??????????System.out.println("?離線??:?"?+?m.getBody()?+?m.getBodies());??????}??}?? 得到好友列表
[java] view plaincopy
private?void?testGetRoster(XMPPConnection?conn)?throws?Exception?{????????????Roster?r?=?conn.getRoster();??????Collection<RosterEntry>?c?=?r.getEntries();??????for(RosterEntry?re?:?c)?{??????????StringBuilder?sb?=?new?StringBuilder();??????????sb.append("name?:?").append(re.getName());??????????sb.append("\nuser?:?").append(re.getUser());??????????sb.append("\ntype?:?").append(re.getType());??????????sb.append("\nstatus?:?").append(re.getStatus());??????????System.out.println(sb.toString());??????????System.out.println("-----------------------------");??????}??????System.out.println(r.getEntries());?????????????????????????}?? 管理好友,監(jiān)聽(tīng)好友請(qǐng)求
[java] view plaincopy
<pre?name="code"?class="java">?? [java] view plaincopy
</pre><pre?name="code"?class="java">private?void?testAddAndDelFriends(final?XMPPConnection?conn)?throws?Exception?{??????????Roster?r?=?conn.getRoster();????????????????????????????????????????????????????????????????????????PacketListener?packetListener?=?new?PacketListener()?{????????????????????????????@Override??????????????public?void?processPacket(Packet?packet)?throws?NotConnectedException?{????????????????????????????????????????????Presence?presence?=?(Presence)?packet;??????????????????Type?type?=?presence.getType();????????????????????????????????????if(Type.subscribe.equals(type))?{??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????presence.setType(Type.unsubscribed);????????????????????????????????????????????presence.setTo(presence.getFrom());??????????????????????presence.setPacketID(presence.getPacketID());??????????????????????Roster?r?=?conn.getRoster();??????????????????????try?{??????????????????????????RosterEntry?entry?=?r.getEntry(presence.getFrom());??????????????????????????if(entry?!=?null)??????????????????????????????r.removeEntry(entry);??????????????????????}?catch?(NotLoggedInException?|?NoResponseException?|?XMPPErrorException?e)?{????????????????????????????????????????????????????e.printStackTrace();??????????????????????}??????????????????????conn.sendPacket(presence);????????????????????????????????????????}?else?if(Type.unsubscribe.equals(type))?{??????????????????????presence.setTo(presence.getFrom());??????????????????????presence.setType(Type.unsubscribe);??????????????????????Roster?r?=?conn.getRoster();??????????????????????try?{??????????????????????????r.removeEntry(r.getEntry(presence.getFrom()));??????????????????????}?catch?(NotLoggedInException?|?NoResponseException?|?XMPPErrorException?e)?{????????????????????????????????????????????????????e.printStackTrace();??????????????????????}??????????????????????conn.sendPacket(presence);??????????????????}???????????????}??????????};????????????????????????????????????????????????????????????PacketFilter?packetFilter?=?new?AndFilter(new?PacketTypeFilter(Presence.class));????????????????????conn.addPacketListener(packetListener,?packetFilter);????????????????????????????????????????RosterExchangeManager?rem?=?new?RosterExchangeManager(conn);??????????rem.addRosterListener(new?RosterExchangeListener()?{????????????????@Override??????????????public?void?entriesReceived(String?from,?Iterator<RemoteRosterEntry>?remoteRosterEntries)?{??????????????????System.out.println(from);??????????????????while(remoteRosterEntries.hasNext())?{??????????????????????RemoteRosterEntry?entry?=?remoteRosterEntries.next();??????????????????????System.out.println(entry.getUser()?+?"?:?"?+?entry.getName());??????????????????}??????????????}????????????????????????});??????}?? 得到好友的信息。主要是VCard類的使用
[java] view plaincopy
private?void?testGetFriendInfo(XMPPConnection?conn)?throws?Exception?{??????????VCard?vCard?=?new?VCard();??????????VCardManager?vcManager?=?new?VCardManager();????????????????????boolean?b?=?vcManager.isSupported("ly@192.168.1.100",?conn);??????????System.out.println(b);??????????vCard.load(conn,?"ly@192.168.1.100");??????????????????????byte[]?avatarBytes?=?vCard.getAvatar();??????????????????????if(avatarBytes?==?null)?{???????????????return;???????????}?????????????????????????????????ImageIcon?icon?=?new?ImageIcon(avatarBytes);???????????System.out.println(icon.getIconWidth()?+?"?:?"?+?icon.getIconHeight());?????????????????????????????????ByteArrayInputStream?bais?=?new?ByteArrayInputStream(avatarBytes);???????????try?{?????????????Image?image?=?ImageIO.read(bais);?????????????FileOutputStream?fos?=?new?FileOutputStream("D://icon.jpg");?????????????fos.write(avatarBytes);?????????????fos.close();????????????}????????????catch?(IOException?e)?{??????????????e.printStackTrace();???????????}??????}?? 設(shè)置自己的狀態(tài)信息
[java] view plaincopy
private?void?testSetInfo(XMPPConnection?conn)?throws?Exception?{??????VCard?vCard?=?new?VCard();??????vCard.load(conn);??????vCard.setEmailHome("admin@126.com");??????vCard.setAddressFieldWork("POSTAL",?"匯寶大廈");????????????vCard.save(conn);????????????Presence?p?=?new?Presence(Type.available);??????p.setTo("ly@192.168.1.100");????????????p.setStatus("我的心情");????????????conn.sendPacket(p);??}?? 監(jiān)聽(tīng)好友的狀態(tài)
[java] view plaincopy
private?void?testSetRosterListener(XMPPConnection?conn)?throws?Exception?{??????????Roster?r?=?conn.getRoster();??????????r.createEntry("ly@192.168.1.100",?"昵稱",?null);??????????r.addRosterListener(new?RosterListener()?{????????????????????????????@Override??????????????public?void?presenceChanged(Presence?presence)?{????????????????????????????????????System.out.println("presenceChanged");??????????????}????????????????????????????@Override??????????????public?void?entriesUpdated(Collection<String>?addresses)?{????????????????????????????????????System.out.println("entriesUpdated");??????????????}????????????????????????????@Override??????????????public?void?entriesDeleted(Collection<String>?addresses)?{????????????????????????????????????System.out.println("entriesDeleted");??????????????}????????????????????????????@Override??????????????public?void?entriesAdded(Collection<String>?addresses)?{????????????????????????????????????System.out.println("entriesAdded");??????????????}??????????});??????}?? 監(jiān)聽(tīng)好友的輸入狀態(tài)
[java] view plaincopy
private?void?testGetExtention(XMPPConnection?conn)?throws?Exception?{??????????Chat?chat?=?ChatManager.getInstanceFor(conn).createChat("ly@192.168.1.100",?new?MessageListener()?{????????????????????????????@Override??????????????public?void?processMessage(Chat?chat,?Message?message)?{????????????????????????????????????PacketExtension?pe?=?message.getExtension("http://jabber.org/protocol/chatstates");??????????????????switch?(pe.getElementName())?{??????????????????case?"composing":??????????????????????System.out.println("正在輸入......");??????????????????????break;??????????????????case?"paused":??????????????????????System.out.println("正在冥想......");??????????????????????break;??????????????????case?"active":??????????????????????System.out.println("對(duì)方已發(fā)送。");??????????????????????break;??????????????????case?"gone":??????????????????????System.out.println("對(duì)話框已被關(guān)閉。");??????????????????????break;??????????????????default:??????????????????????break;??????????????????}??????????????}??????????});??????????Message?msg?=?new?Message();??????????msg.addExtension(new?ChatStateExtension(ChatState.gone));??????????msg.setBody("hello?world");??????????chat.sendMessage(msg);??????}?? 增加聊天室進(jìn)行多人聊天
[java] view plaincopy
private?MultiUserChat?multiUserChat;??????private?void?testMutiUserChat(XMPPConnection?conn)?throws?Exception?{??????????MultiUserChat.addInvitationListener(conn,?new?InvitationListener()?{????????????????????????????@Override??????????????public?void?invitationReceived(XMPPConnection?conn,?String?room,?String?inviter,?String?reason,?String?password,?Message?message)?{??????????????????StringBuilder?sb?=?new?StringBuilder();??????????????????sb.append("房間號(hào)??:?").append(room);??????????????????sb.append("\n邀請(qǐng)者??:?").append(inviter);??????????????????sb.append("\n理由??:?").append(reason);??????????????????sb.append("\n密碼??:?").append(password);??????????????????sb.append("\n消息??:?").append(message);??????????????????System.out.println(sb);??????????????????multiUserChat?=?new?MultiUserChat(conn,?room);??????????????????try?{??????????????????????multiUserChat.join("admin",?password);??????????????????}?catch?(XMPPErrorException?e)?{????????????????????????????????????????????e.printStackTrace();??????????????????}?catch?(SmackException?e)?{????????????????????????????????????????????e.printStackTrace();??????????????????}??????????????????multiUserChat.addMessageListener(new?PacketListener()?{????????????????????????????????????????????@Override??????????????????????public?void?processPacket(Packet?packet)?throws?NotConnectedException?{??????????????????????????Message?msg?=?(Message)?packet;??????????????????????????System.out.println(msg.getBody());??????????????????????}??????????????????});??????????????}??????????});??????????while(true)?{??????????????try?{??????????????????Thread.sleep(500);??????????????????if(multiUserChat?==?null)??????????????????????continue;????????????????????????????????????????????????????????????????????????????????????????????????????????????????Message?msg?=?new?Message();????????????????????????????????????msg.setTo("a@conference.192.168.1.100");??????????????????msg.setType(Message.Type.groupchat);??????????????????msg.setThread(Thread.currentThread().getId()?+?"");??????????????????msg.setBody("hello");??????????????????multiUserChat.sendMessage(msg);??????????????????break;??????????????}?catch?(InterruptedException?e)?{??????????????????e.printStackTrace();??????????????}?catch?(NotConnectedException?e)?{??????????????????e.printStackTrace();??????????????}?catch?(XMPPException?e)?{??????????????????e.printStackTrace();??????????????}??????????}??????}???????? 發(fā)送和接收文件
[java] view plaincopy
private?void?testSendFile(XMPPConnection?conn)?throws?Exception?{????????????????????FileTransferManager?ftm?=?new?FileTransferManager(conn);??????????ftm.addFileTransferListener(new?FileTransferListener()?{????????????????@Override??????????????public?void?fileTransferRequest(FileTransferRequest?request)?{??????????????????System.out.println(request.getFileName());??????????????????IncomingFileTransfer?inComingFileTransfer?=?request.accept();??????????????????try?{????????????????????????????????????????????File?file?=?new?File("D://"?+?request.getFileName());??????????????????????inComingFileTransfer.recieveFile(file);??????????????????}?catch?(Exception?e)?{??????????????????????e.printStackTrace();??????????????????}??????????????}??????????});????????????????????????????????????????OutgoingFileTransfer?oft?=?ftm.createOutgoingFileTransfer("admin@192.168.1.100/潘迪安");??????????File?file?=?new?File("D://time.jpg");??????????oft.sendFile(file,?"圖片");??????????System.out.println(oft.isDone());??????}?? 創(chuàng)建多人聊天室
[java] view plaincopy
????private?void?testCreateRoom(XMPPConnection?conn)?throws?Exception?{??????????while(true)?{??????????????if(conn?!=?null)??????????????????break;??????????}????????????????????MultiUserChat?muc?=?new?MultiUserChat(conn,?"ly@conference.192.168.1.100");????????????????????muc.create("real_admin");??????????Form?form?=?muc.getConfigurationForm();??????????Form?submitForm?=?form.createAnswerForm();???????????????????????????????????????????????????????????????????????????????????muc.sendConfigurationForm(submitForm);????????????????????muc.addInvitationRejectionListener(new?InvitationRejectionListener()?{????????????????????????????@Override??????????????public?void?invitationDeclined(String?invitee,?String?reason)?{??????????????????System.out.println(invitee?+?"?:?"?+?reason);??????????????}??????????});??????????muc.invite("yy@192.168.1.100",?"ly_room");??????}?? 管理房間
[java] view plaincopy
<pre?name="code"?class="java">private?void?testManageRoom(XMPPConnection?conn)?throws?Exception?{??????????testCreateRoom(conn);??????????MultiUserChat?muc?=?new?MultiUserChat(conn,?"ly@conference.192.168.1.100");??????????????????????????????????????????????????????????????????????????????????????????????????????????????muc.revokeVoice("yy");????????????????}?? 注冊(cè)
[java] view plaincopy
private?void?testRegister(XMPPConnection?conn)?throws?Exception?{????????????????????Registration?r?=?new?Registration();??????????Map<String,?String>?attributes?=?new?HashMap<String,?String>();??????????attributes.put("username",?"newuser");??????????attributes.put("password",?"0");??????????attributes.put("email",?"new00@126.com");??????????attributes.put("name",?"name@192.168.1.100");????????????????????r.setType(IQ.Type.SET);??????????r.setAttributes(attributes);????????????????????PacketFilter?packetFilter?=?new?AndFilter(new?PacketIDFilter(r.getPacketID()),?new?PacketTypeFilter(IQ.class));??????????PacketCollector?collector?=?conn.createPacketCollector(packetFilter);???????????System.out.println(r);??????????conn.sendPacket(r);??????????IQ?result?=?(IQ)?collector.nextResult();??????????if(result?==?null)?{??????????????System.out.println("server沒(méi)有返回不論什么信息");??????????}?else?{??????????switch?(result.getType().toString())?{??????????????case?"result":??????????????????System.out.println("注冊(cè)成功");??????????????????break;??????????????case?"error":??????????????????if(result.getError().toString().equalsIgnoreCase("conflict"))??????????????????????System.out.println("用戶名稱已存在");??????????????????else???????????????????????System.out.println("注冊(cè)失敗");??????????????????break;??????????????default:??????????????????break;??????????????}??????????}??????}?? 管理賬號(hào)password
[java] view plaincopy
private?void?testModifyPwd(XMPPConnection?conn)?throws?Exception?{????????????????????AccountManager?am?=?AccountManager.getInstance(conn);??????????Collection<String>?c?=?am.getAccountAttributes();??????????for(String?s?:?c)?{??????????????System.out.println(s);??????????}???????????????????????????am.getAccountAttribute("username");??????????am.createAccount("newUser",?"0");??????????am.changePassword("00");??????}?? 至于細(xì)節(jié),中遇到,我在程序代碼描述
參考博客:
http://blog.csdn.net/shimiso/article/details/11225873
總結(jié)
以上是生活随笔為你收集整理的smark和openfire即时通信代码的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。