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();   }}


原创粉丝点击