IM学习--smackDemo
来源:互联网 发布:网络和互联网的区别 编辑:程序博客网 时间:2024/05/24 01:39
使用之前先下载Smack,然后把Smack开发的jar引入到项目中。
package com.bis.smack.client;import java.util.Collection;import org.jivesoftware.smack.Chat;import org.jivesoftware.smack.Connection;import org.jivesoftware.smack.ConnectionConfiguration;import org.jivesoftware.smack.MessageListener;import org.jivesoftware.smack.PacketListener;import org.jivesoftware.smack.Roster;import org.jivesoftware.smack.RosterEntry;import org.jivesoftware.smack.XMPPConnection;import org.jivesoftware.smack.XMPPException;import org.jivesoftware.smack.packet.Message;import org.jivesoftware.smack.packet.Packet;import org.jivesoftware.smack.packet.PacketExtension;import org.jivesoftware.smack.packet.Presence;import org.jivesoftware.smackx.ChatState;import org.jivesoftware.smackx.muc.InvitationListener;import org.jivesoftware.smackx.muc.MultiUserChat;import org.jivesoftware.smackx.packet.ChatStateExtension;import org.junit.Test;public class SmackDemos {private static XMPPConnection connection = new XMPPConnection("wang-think");private static String USRE_NAME = "majian";private static String PASSWORD = "majian";static{try {connection.connect();connection.login(USRE_NAME,PASSWORD);} catch (Exception e) {e.printStackTrace();}}/** *创建连接接收消息 */@Testpublic void testRecieveMessage()throws Exception{//创建一个聊天对话,接收m用户的消息 ,并发送消息给m用户//其中m@wang-think,m是指m用户名,wang-think是指m所登陆的机器---jidChat chat = connection.getChatManager().createChat("m@wang-think",new MessageListener() {@Overridepublic void processMessage(Chat arg0, Message message) {System.out.println("Received message: "+ message.getBody());}});Message msg = new Message();chat.sendMessage("Howdy!");while(true);//死循环,保持连接不被中断}/** *连接管理 */@Testpublic void testConnectionManager()throws Exception{ConnectionConfiguration config = new ConnectionConfiguration("wang-think");config.setCompressionEnabled(true);config.setSASLAuthenticationEnabled(true);connection = new XMPPConnection(config);connection.connect();connection.login("majian", "majian", "SomeResource");// Disconnect from the server//connection.disconnect();while(true);}/** * 获取好友列表 */@Testpublic void testLoadRoster()throws Exception{Roster roster = connection.getRoster();Collection<RosterEntry> entries = roster.getEntries();for (RosterEntry entry : entries) { System.out.println(entry);}}/** *发送消息 */@Testpublic void testSendMessage()throws Exception{// XMPPConnection.DEBUG_ENABLED = true;// 创建一个和m的对话,并设置信息监听Chat mychat = connection.getChatManager().createChat("m@wang-think",new MessageListener() {@Overridepublic void processMessage(Chat arg0, Message message) {String messageBody = message.getBody();System.out.println("收到信息:" + messageBody);}});// 发送给m文本信息mychat.sendMessage("hello");// 退出登陆while(true);}/** *设置自己的登陆状态 */@Testpublic void testSeetOwnState()throws Exception{// XMPPConnection.DEBUG_ENABLED = true ;// 设置服务器地址// 设置登陆后的个人状态信息Presence p = new Presence(Presence.Type.available);p.setStatus("无聊中。。。");connection.sendPacket(p);while (true);// 退出登陆// conn.disconnect();}/** * 聊天窗口输入状态,使用XEP-0085 协议 */@Testpublic void testTalkState()throws Exception{Message mess = new Message(); mess.addExtension(new ChatStateExtension(ChatState.composing)); mess.setBody("这是测试数据");Chat mychat = connection.getChatManager().createChat("m@wang-think",new MessageListener() {@Overridepublic void processMessage(Chat arg0, Message message) {String messageBody = message.getBody();System.out.println("收到信息:" + messageBody);}});// 发送给m文本信息mychat.sendMessage(mess); // 退出登陆while(true);}/** *聊天窗口输入状态,接收端处理逻辑 */@Testpublic void testTalkStateRecieveClient()throws Exception{// 创建一个和test1的对话,并设置信息监听Chat mychat = connection.getChatManager().createChat("m@wang-think",new MessageListener() {@Overridepublic void processMessage(Chat arg0, Message message) {PacketExtension pe; String messageBody = message.getBody(); pe = message.getExtension("composing" , "http://jabber.org/protocol/chatstates" ); if (pe != null ){ System.out.println("对方正在输入......" ); } pe = message.getExtension("active" , "http://jabber.org/protocol/chatstates" ); if (pe != null ){ System.out.println("接收到信息:" +messageBody); } pe = message.getExtension("paused" , "http://jabber.org/protocol/chatstates" ); if (pe != null ){ System.out.println("对方已暂停输入" ); } pe = message.getExtension("inactive" , "http://jabber.org/protocol/chatstates" ); if (pe != null ){ System.out.println("对方聊天窗口失去焦点" ); } pe = message.getExtension("gone" , "http://jabber.org/protocol/chatstates" ); if (pe != null ){ System.out.println("对方聊天窗口被关闭" ); } }});// 发送给test1文本信息mychat.sendMessage("hello");}/** *接收邀请,加入多人聊天房间 */@Testpublic void testYaoQingSevralUserTalk()throws Exception{MultiUserChat.addInvitationListener(connection, new InvitationListener() { @Overridepublic void invitationReceived(Connection conn, String room,String inviter, String reason, String password, Message message) {MultiUserChat multiUserChat = new MultiUserChat(conn, room); System.out.println("收到来自 " +inviter+ " 的聊天室邀请。邀请附带内容:" +reason); try { multiUserChat.join("test2" , password); } catch (XMPPException e) { System.out.println("加入聊天室失败" ); e.printStackTrace(); } System.out.println("成功加入聊天室" ); multiUserChat.addMessageListener(new PacketListener() { @Override public void processPacket(Packet packet) { Message message = (Message)packet; //接收来自聊天室的聊天信息 System.out.println(message.getFrom()+":" +message.getBody()); } }); //发送信息到聊天室 try {multiUserChat.sendMessage("新手到来,大家关照!");} catch (XMPPException e) {e.printStackTrace();} } }); while(true);}/** * 登陆GTalk用户,并查询该用户的所有好友列表 */@Testpublic void testLogOnGtalk()throws Exception{XMPPConnection conn = new XMPPConnection( new ConnectionConfiguration( "talk.google.com" , 5222 , "gmail.com" )); conn.connect(); //输入gtalk的账号密码 conn.login("88888888" , "8888888888" ); Collection<RosterEntry> rosters = conn.getRoster().getEntries(); //获取gtalk上的好友列表 System.out.println("我的好友列表:=======================" ); for (RosterEntry rosterEntry : rosters){ System.out.print("name: " +rosterEntry.getName()+ ",jid: " +rosterEntry.getUser()); System.out.println("" ); } System.out.println("我的好友列表:=======================" ); conn.disconnect(); }}
- IM学习--smackDemo
- 移动 IM 学习笔记
- 学习IM软件开发
- QQ IM架构学习总结
- 移动IM开发学习<1>
- 移动IM开发学习<2>
- 移动IM开发学习<3>
- 移动IM开发学习<4>
- 移动IM开发学习<5>
- XMPP学习3-IM即时消息
- IM
- IM
- IM
- IM
- IM
- IM菜鸟学习之Socket聊天-客户端
- Android基于XMPP Smack Openfire下学习开发IM
- IM菜鸟学习之Socket聊天-简单服务器的搭建
- Oracle和SQL SERVER在SQL语句上的差别
- java 重写和重载
- DVRRDK, EZSDK和DVSDK这三者有什么区别
- android 网络连接判断与处理
- UNIX网络编程——名字与地址转换(gethostbyname,gethostbyaddr,getservbyname,getservbyport,getaddrinfo,getnameinfo函数)
- IM学习--smackDemo
- IP保留地址
- 在C语言中利用PCRE实现正则表达式
- live555
- Mac OS X中MacPorts安装和使用
- Ubuntu 10.10 下安装与配置 MongoDB 1.6.5
- JS判断浏览器类型与版本
- Retinex processing for automatic image enhancement 翻译
- Cocos2d-x安卓开发过程中遇到的怪现象