zoukankan      html  css  js  c++  java
  • smark和openfire即时通信代码

    从:http://blog.csdn.net/casuallc/article/details/34794501

    server:openfire

    client计划:smark写

    首先安装openfire,下载client直接安装就可以。数据库能够用openfire自身的,也能够用自己的数据库,仅仅要按提示设置好參数就可以

    之后,就能够用smark写一个client測试与openfire的通信了(须要引进的jar包除了smark自身的。还要引入xmlpull-1.1.3.1.jar、kxml2-2.3.0.jar两个包

        ,作用是解析xml文件)

    备注:我用的smark版本号是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包使用来调试的。tcp是用来初始化连接的、extension包里面含有发送离线消息、文件等类


    以下是创建一个连接

    1. ConnectionConfiguration config = new ConnectionConfiguration("ip"5222);  
    2.     //设置成disabled。则不会去验证server证书是否有效,默觉得enabled  
    3.     config.setSecurityMode(SecurityMode.disabled);  
    4.     //设置能够调试。默觉得false,老版本号的写法为XMPPConnection.DEBUG_ENABLED = true;  
    5.     config.setDebuggerEnabled(true);  
    6.     //设置是否在登陆的时候告诉server,默觉得true  
    7.     config.setSendPresence(false);  
    8.     //XMPPConnection在后来的版本号中改成了抽象类  
    9.     XMPPConnection conn = new XMPPTCPConnection(config);  
    10.     //设置等待时间  
    11.     conn.setPacketReplyTimeout(5000);  
    12.     conn.connect();  
    13.     //username,password,资源名(比如:假设是用潘迪安发送的消息。则资源名就是:  潘迪安,用于标识client)  
    14.     conn.login("admin""0""资源名");  
    关于连接的參数,在新版本号中所有在config中设置


    发送消息

    1. private void testSendMessage(XMPPConnection conn) throws Exception {  
    2.         //jid在数据表中ofroster能够查到。通常是   username@server名称  
    3.         Chat chat = ChatManager.getInstanceFor(conn).createChat("ly@192.168.1.100", new MessageListener() {  
    4.             @Override  
    5.             public void processMessage(Chat chat, Message message) {  
    6.                 System.out.println("Received message: " + message);  
    7.             }  
    8.         });  
    9.         Message msg = new Message();  
    10.         msg.setBody("hello world");  
    11.         //定义成normal,在对象不在线时发送离线消息。消息存放在数据表ofoffline中  
    12.         msg.setType(Message.Type.normal);  
    13.         //发送消息。參数能够是字符串,也能够是message对象  
    14.         chat.sendMessage(msg);  
    15.         //发送广播  
    16.         conn.sendPacket(msg);  
    17.     }  

    发送离线消息
    1. private void testOffLine(XMPPConnection conn) throws Exception {  
    2.     //离线文件  
    3.     OfflineMessageManager offMM = new OfflineMessageManager(conn);  
    4.     System.out.println("离线文件数量 :" + offMM.getMessageCount());  
    5.     System.out.println("离线文件内容 :");  
    6.     //经測试。当调用getMessages时,会触发chat设置的监听器,从而输出离线消息内容。可是getMessages方法返回的离线消息为空  
    7.     //推測回调函数的触发条件是一个变量,方变量改变时(while(flag))。运行回调函数  
    8.     List<Message> listMessage = offMM.getMessages();  
    9.     //listMessage的大小为0  
    10.     System.out.println(listMessage.size());  
    11.     for(Message m : offMM.getMessages()) {  
    12.         System.out.println(" 离线  : " + m.getBody() + m.getBodies());  
    13.     }  
    14. }  

    得到好友列表
    1. private void testGetRoster(XMPPConnection conn) throws Exception {  
    2.     //得到该user的roster(相当于好友列表),不区分是否在线  
    3.     Roster r = conn.getRoster();  
    4.     Collection<RosterEntry> c = r.getEntries();  
    5.     for(RosterEntry re : c) {  
    6.         StringBuilder sb = new StringBuilder();  
    7.         sb.append("name : ").append(re.getName());  
    8.         sb.append(" user : ").append(re.getUser());  
    9.         sb.append(" type : ").append(re.getType());  
    10.         sb.append(" status : ").append(re.getStatus());  
    11.         System.out.println(sb.toString());  
    12.         System.out.println("-----------------------------");  
    13.     }  
    14.     System.out.println(r.getEntries());  
    15.     //输出内容  
    16.     /*  name : null 
    17.         user : ly@192.168.1.100 
    18.         type : from 
    19.         status : null 
    20.         ----------------------------- 
    21.         name : null 
    22.         user : yy@192.168.1.100 
    23.         type : to 
    24.         status : null 
    25.         ----------------------------- 
    26.         [ly@192.168.1.100, yy@192.168.1.100] 
    27.      */  
    28. }  

    管理好友,监听好友请求
    1. <pre name="code" class="java">  
    1. </pre><pre name="code" class="java">private void testAddAndDelFriends(final XMPPConnection conn) throws Exception {  
    2.         Roster r = conn.getRoster();  
    3.         // 用户的jid。昵称,用户的分组。假设该用户不存在也能够加入  
    4.     //  r.createEntry("yy@192.168.1.100", "yy", null);  
    5.         // rosterEntry的构造方法是包訪问权限。不能直接new  
    6.     //  RosterEntry entry = r.getEntry("ly@192.168.1.100");  
    7.         // r.removeEntry(entry);  
    8.           
    9.         //监听全部的请求,之后能够过滤掉不想要的请求  
    10.         PacketListener packetListener = new PacketListener() {  
    11.               
    12.             @Override  
    13.             public void processPacket(Packet packet) throws NotConnectedException {  
    14.                 /* 
    15.                 available   
    16.                 unavailable  
    17.                 subscribe  发出加入好友的请求 
    18.                 subscribed 允许加入好友 
    19.                 unsubscribe 发出删除好友请求 
    20.                 unsubscribed 删除好友(即拒绝加入好友)。 
    21.                               备注:对方发出加入好友的请求后。在server端会自己主动把对方加入到自己的roster,所以在运行处理好友请求或加入删除好友的时候,要又一次获取roster,更新好友列表 
    22.                 */  
    23.                 Presence presence = (Presence) packet;  
    24.                 Type type = presence.getType();  
    25.                 //请求加入好友  
    26.                 if(Type.subscribe.equals(type)) {  
    27.                     //注意点:要设置to(即指明要发送的对象,否则不能成功拒绝),至于from不用设置,由于在sendPacket方法中已经设置了,formMode初始化的时候为OMITTED,能够自己设置  
    28.                     /* 
    29.                         switch (fromMode) { 
    30.                         case OMITTED: 
    31.                             packet.setFrom(null); 
    32.                             break; 
    33.                         case USER: 
    34.                             packet.setFrom(getUser());//getUser是抽象方法 
    35.                             break; 
    36.                      */  
    37.                     //直接用传来的presence,不能自己新建一个presence(可能要验证presence是否是原来的对象,来推断是谁拒绝了谁的好友请求),否则不能成功拒绝对方加入好友  
    38.                     //例:A--presence1-->B   A---presence2---C, C---presence3---A这样server就没办法推断是B、C中的哪一个拒绝了A的请求  
    39.                     presence.setType(Type.unsubscribed);//拒绝,发送了一条presence  
    40.                     //presence.setType(Type.unavailable);//发送了两条presence,一条是subscribed,一条是unavailabled,能接受对方消息,自己的状态显示隐身。再一次登录的时候显示在线  
    41.                     presence.setTo(presence.getFrom());  
    42.                     presence.setPacketID(presence.getPacketID());  
    43.                     Roster r = conn.getRoster();  
    44.                     try {  
    45.                         RosterEntry entry = r.getEntry(presence.getFrom());  
    46.                         if(entry != null)  
    47.                             r.removeEntry(entry);  
    48.                     } catch (NotLoggedInException | NoResponseException | XMPPErrorException e) {  
    49.                         // TODO Auto-generated catch block  
    50.                         e.printStackTrace();  
    51.                     }  
    52.                     conn.sendPacket(presence);  
    53.                     //多方删除自己  
    54.                 } else if(Type.unsubscribe.equals(type)) {  
    55.                     presence.setTo(presence.getFrom());  
    56.                     presence.setType(Type.unsubscribe);  
    57.                     Roster r = conn.getRoster();  
    58.                     try {  
    59.                         r.removeEntry(r.getEntry(presence.getFrom()));  
    60.                     } catch (NotLoggedInException | NoResponseException | XMPPErrorException e) {  
    61.                         // TODO Auto-generated catch block  
    62.                         e.printStackTrace();  
    63.                     }  
    64.                     conn.sendPacket(presence);  
    65.                 }   
    66.             }  
    67.         };  
    68.           
    69. //      PacketFilter packetFilter = new PacketFilter() {  
    70. //            
    71. //          //假设返回false,则不把事件交给listener处理,否则会调用packetListener中的processPacket方法  
    72. //          //方法解释true if and only if packet passes the filter.  
    73. //          @Override  
    74. //          public boolean accept(Packet packet) {  
    75. //              System.out.println("2" + packet);  
    76. //              return true;  
    77. //          }  
    78. //      };   
    79.           
    80.         //过滤掉全部的不是好友请求、删除的全部packet  
    81.         PacketFilter packetFilter = new AndFilter(new PacketTypeFilter(Presence.class));  
    82.           
    83.         conn.addPacketListener(packetListener, packetFilter);  
    84.           
    85.           
    86.         //未知  
    87.         RosterExchangeManager rem = new RosterExchangeManager(conn);  
    88.         rem.addRosterListener(new RosterExchangeListener() {  
    89.   
    90.             @Override  
    91.             public void entriesReceived(String from, Iterator<RemoteRosterEntry> remoteRosterEntries) {  
    92.                 System.out.println(from);  
    93.                 while(remoteRosterEntries.hasNext()) {  
    94.                     RemoteRosterEntry entry = remoteRosterEntries.next();  
    95.                     System.out.println(entry.getUser() + " : " + entry.getName());  
    96.                 }  
    97.             }  
    98.               
    99.         });  
    100.     }  


    得到好友的信息。主要是VCard类的使用
    1. private void testGetFriendInfo(XMPPConnection conn) throws Exception {  
    2.         VCard vCard = new VCard();  
    3.         VCardManager vcManager = new VCardManager();  
    4.         //此处返回false  
    5.         boolean b = vcManager.isSupported("ly@192.168.1.100", conn);  
    6.         System.out.println(b);  
    7.         vCard.load(conn, "ly@192.168.1.100");  
    8.          // Load Avatar from VCard  
    9.          byte[] avatarBytes = vCard.getAvatar();  
    10.          //得不到头像等的信息  
    11.          if(avatarBytes == null) {  
    12.              return;  
    13.          }  
    14.            
    15.          // To create an ImageIcon for Swing applications  
    16.          ImageIcon icon = new ImageIcon(avatarBytes);  
    17.          System.out.println(icon.getIconWidth() + " : " + icon.getIconHeight());  
    18.            
    19.          // To create just an image object from the bytes  
    20.          ByteArrayInputStream bais = new ByteArrayInputStream(avatarBytes);  
    21.          try {  
    22.            Image image = ImageIO.read(bais);  
    23.            FileOutputStream fos = new FileOutputStream("D://icon.jpg");  
    24.            fos.write(avatarBytes);  
    25.            fos.close();  
    26.           }  
    27.           catch (IOException e) {  
    28.             e.printStackTrace();  
    29.          }  
    30.     }  

    设置自己的状态信息
    1. private void testSetInfo(XMPPConnection conn) throws Exception {  
    2.     VCard vCard = new VCard();  
    3.     vCard.load(conn);  
    4.     vCard.setEmailHome("admin@126.com");  
    5.     vCard.setAddressFieldWork("POSTAL""汇宝大厦");  
    6.     //改动完要保存改动的内容,否则没办法更新到server  
    7.     vCard.save(conn);  
    8.     //改动自身的状态,包含隐身,上线(能够指定对特定的好友更改状态)  
    9.     Presence p = new Presence(Type.available);  
    10.     p.setTo("ly@192.168.1.100");  
    11.     //改动心情  
    12.     p.setStatus("我的心情");  
    13.     //相同要发到server  
    14.     conn.sendPacket(p);  
    15. }  

    监听好友的状态
    1. private void testSetRosterListener(XMPPConnection conn) throws Exception {  
    2.         Roster r = conn.getRoster();  
    3.         r.createEntry("ly@192.168.1.100""昵称"null);  
    4.         r.addRosterListener(new RosterListener() {  
    5.               
    6.             @Override  
    7.             public void presenceChanged(Presence presence) {  
    8.                 //更改状态信息时调用该方法(更改在线状态。改动心情。改动头像等)  
    9.                 System.out.println("presenceChanged");  
    10.             }  
    11.               
    12.             @Override  
    13.             public void entriesUpdated(Collection<String> addresses) {  
    14.                 //该方法以及以下的方法都是在server改动好友信息时触发  
    15.                 System.out.println("entriesUpdated");  
    16.             }  
    17.               
    18.             @Override  
    19.             public void entriesDeleted(Collection<String> addresses) {  
    20.                 // TODO Auto-generated method stub  
    21.                 System.out.println("entriesDeleted");  
    22.             }  
    23.               
    24.             @Override  
    25.             public void entriesAdded(Collection<String> addresses) {  
    26.                 // TODO Auto-generated method stub  
    27.                 System.out.println("entriesAdded");  
    28.             }  
    29.         });  
    30.     }  

    监听好友的输入状态
    1. private void testGetExtention(XMPPConnection conn) throws Exception {  
    2.         Chat chat = ChatManager.getInstanceFor(conn).createChat("ly@192.168.1.100"new MessageListener() {  
    3.               
    4.             @Override  
    5.             public void processMessage(Chat chat, Message message) {  
    6.                 //得到输入状态,分为五种:正在输入(composing)。暂停输入(paused),发送(active),关闭对话框(gone)  
    7.                 PacketExtension pe = message.getExtension("http://jabber.org/protocol/chatstates");  
    8.                 switch (pe.getElementName()) {  
    9.                 case "composing":  
    10.                     System.out.println("正在输入......");  
    11.                     break;  
    12.                 case "paused":  
    13.                     System.out.println("正在冥想......");  
    14.                     break;  
    15.                 case "active":  
    16.                     System.out.println("对方已发送。");  
    17.                     break;  
    18.                 case "gone":  
    19.                     System.out.println("对话框已被关闭。");  
    20.                     break;  
    21.                 default:  
    22.                     break;  
    23.                 }  
    24.             }  
    25.         });  
    26.         Message msg = new Message();  
    27.         msg.addExtension(new ChatStateExtension(ChatState.gone));  
    28.         msg.setBody("hello world");  
    29.         chat.sendMessage(msg);  
    30.     }  

    增加聊天室进行多人聊天
    1. private MultiUserChat multiUserChat;  
    2.     private void testMutiUserChat(XMPPConnection conn) throws Exception {  
    3.         MultiUserChat.addInvitationListener(conn, new InvitationListener() {  
    4.               
    5.             @Override  
    6.             public void invitationReceived(XMPPConnection conn, String room, String inviter, String reason, String password, Message message) {  
    7.                 StringBuilder sb = new StringBuilder();  
    8.                 sb.append("房间号  : ").append(room);  
    9.                 sb.append(" 邀请者  : ").append(inviter);  
    10.                 sb.append(" 理由  : ").append(reason);  
    11.                 sb.append(" 密码  : ").append(password);  
    12.                 sb.append(" 消息  : ").append(message);  
    13.                 System.out.println(sb);  
    14.                 multiUserChat = new MultiUserChat(conn, room);  
    15.                 try {  
    16.                     multiUserChat.join("admin", password);  
    17.                 } catch (XMPPErrorException e) {  
    18.                     // TODO Auto-generated catch block  
    19.                     e.printStackTrace();  
    20.                 } catch (SmackException e) {  
    21.                     // TODO Auto-generated catch block  
    22.                     e.printStackTrace();  
    23.                 }  
    24.                 multiUserChat.addMessageListener(new PacketListener() {  
    25.                       
    26.                     @Override  
    27.                     public void processPacket(Packet packet) throws NotConnectedException {  
    28.                         Message msg = (Message) packet;  
    29.                         System.out.println(msg.getBody());  
    30.                     }  
    31.                 });  
    32.             }  
    33.         });  
    34.         while(true) {  
    35.             try {  
    36.                 Thread.sleep(500);  
    37.                 if(multiUserChat == null)  
    38.                     continue;  
    39.                 //关于发送消息的问题。能够直接发字符串  
    40.                 //也能够发送message。可是要设定message的一些參数,否则不能发送(參数设置例如以下)  
    41.                 //用Chat发送消息时。不用设置,原因是在Chat的sendMessage方法中已经加入了这些參数  
    42.                 /* 
    43.                  *  message.setTo(participant); 
    44.                     message.setType(Message.Type.chat); 
    45.                     message.setThread(threadID); 
    46.                  */  
    47.                 //可是,用MultiUserChat类中的sendMessage方法,直接调用了XMPPConnection中的sendPacket方法,没有设置Message的參数  
    48.                 Message msg = new Message();  
    49.                 //房间名称  
    50.                 msg.setTo("a@conference.192.168.1.100");  
    51.                 msg.setType(Message.Type.groupchat);  
    52.                 msg.setThread(Thread.currentThread().getId() + "");  
    53.                 msg.setBody("hello");  
    54.                 multiUserChat.sendMessage(msg);  
    55.                 break;  
    56.             } catch (InterruptedException e) {  
    57.                 e.printStackTrace();  
    58.             } catch (NotConnectedException e) {  
    59.                 e.printStackTrace();  
    60.             } catch (XMPPException e) {  
    61.                 e.printStackTrace();  
    62.             }  
    63.         }  
    64.     }  
    65.       

    发送和接收文件

    1. private void testSendFile(XMPPConnection conn) throws Exception {  
    2.         // 发送文件的管理器  
    3.         FileTransferManager ftm = new FileTransferManager(conn);  
    4.         ftm.addFileTransferListener(new FileTransferListener() {  
    5.   
    6.             @Override  
    7.             public void fileTransferRequest(FileTransferRequest request) {  
    8.                 System.out.println(request.getFileName());  
    9.                 IncomingFileTransfer inComingFileTransfer = request.accept();  
    10.                 try {  
    11.                     //能够直接写到file文件里  
    12.                     File file = new File("D://" + request.getFileName());  
    13.                     inComingFileTransfer.recieveFile(file);  
    14.                 } catch (Exception e) {  
    15.                     e.printStackTrace();  
    16.                 }  
    17.             }  
    18.         });  
    19.         // 注意jid格式。以下为标准格式,假设不正确则会抛出jid格式错误的异常  
    20.         // (if (parseName(jid).length() <= 0 || parseServer(jid).length() <= 0|| parseResource(jid).length() <= 0) {  
    21.         // return false;  
    22.         OutgoingFileTransfer oft = ftm.createOutgoingFileTransfer("admin@192.168.1.100/潘迪安");  
    23.         File file = new File("D://time.jpg");  
    24.         oft.sendFile(file, "图片");  
    25.         System.out.println(oft.isDone());  
    26.     }  
    创建多人聊天室
    1.     private void testCreateRoom(XMPPConnection conn) throws Exception {  
    2.         while(true) {  
    3.             if(conn != null)  
    4.                 break;  
    5.         }  
    6.         //@之前的是会议房间名称。之后的是conference+ip(固定格式,不能改变)  
    7.         MultiUserChat muc = new MultiUserChat(conn, "ly@conference.192.168.1.100");  
    8.         //昵称,假设该房间已经存在,则会抛出Creation failed - Missing acknowledge of room creation.(先增加房间,然后离开房间)  
    9.         muc.create("real_admin");  
    10.         Form form = muc.getConfigurationForm();  
    11.         Form submitForm = form.createAnswerForm();  
    12.         //以下的初始化有什么用,在创建submitForm的时候已经设置參数了  
    13. //      List<FormField> list = submitForm.getFields();  
    14. //      for(FormField f : list) {  
    15. //          if(!(FormField.TYPE_HIDDEN.equals(f.getType())) && f.getVariable() != null) {  
    16. //              submitForm.setDefaultAnswer(f.getVariable());  
    17. //          }  
    18. //      }  
    19.         //參数究竟是什么意思。为什么有的能够设置,有的不能够设置  
    20.         /* 
    21.          *  variable:FORM_TYPE  type:hidden  value:[http://jabber.org/protocol/muc#roomconfig] 
    22.             variable:muc#roomconfig_roomname  type:text-single  value:[] 
    23.             variable:muc#roomconfig_roomdesc  type:text-single  value:[] 
    24.             variable:muc#roomconfig_changesubject  type:boolean  value:[] 
    25.             variable:muc#roomconfig_maxusers  type:list-single  value:[] 
    26.             variable:muc#roomconfig_presencebroadcast  type:list-multi  value:[] 
    27.             variable:muc#roomconfig_publicroom  type:boolean  value:[] 
    28.             variable:muc#roomconfig_persistentroom  type:boolean  value:[] 
    29.             variable:muc#roomconfig_moderatedroom  type:boolean  value:[] 
    30.             variable:muc#roomconfig_membersonly  type:boolean  value:[] 
    31.             variable:muc#roomconfig_allowinvites  type:boolean  value:[] 
    32.             variable:muc#roomconfig_passwordprotectedroom  type:boolean  value:[] 
    33.             variable:muc#roomconfig_roomsecret  type:text-private  value:[] 
    34.             variable:muc#roomconfig_whois  type:list-single  value:[] 
    35.             variable:muc#roomconfig_enablelogging  type:boolean  value:[] 
    36.             variable:x-muc#roomconfig_reservednick  type:boolean  value:[] 
    37.             variable:x-muc#roomconfig_canchangenick  type:boolean  value:[] 
    38.             variable:x-muc#roomconfig_registration  type:boolean  value:[] 
    39.             variable:muc#roomconfig_roomadmins  type:jid-multi  value:[] 
    40.             variable:muc#roomconfig_roomowners  type:jid-multi  value:[] 
    41.          */  
    42.         //submitForm.setAnswer(FormField.TYPE_TEXT_PRIVATE, "0");  
    43.         muc.sendConfigurationForm(submitForm);  
    44.         //被拒绝时运行  
    45.         muc.addInvitationRejectionListener(new InvitationRejectionListener() {  
    46.               
    47.             @Override  
    48.             public void invitationDeclined(String invitee, String reason) {  
    49.                 System.out.println(invitee + " : " + reason);  
    50.             }  
    51.         });  
    52.         muc.invite("yy@192.168.1.100""ly_room");  
    53.     }  

    管理房间
    1. <pre name="code" class="java">private void testManageRoom(XMPPConnection conn) throws Exception {  
    2.         testCreateRoom(conn);  
    3.         MultiUserChat muc = new MultiUserChat(conn, "ly@conference.192.168.1.100");  
    4.         //Thread.sleep(5000);  
    5.         //赋予管理员权限  
    6.         //muc.grantAdmin("yy@192.168.1.100");  
    7.           
    8.           
    9.         //Thread.sleep(5000);  
    10.         //假设是管理员,则不能踢除  
    11.         //muc.banUser("yy@192.168.1.100", "太水");  
    12.           
    13.         //收回说话的权限  
    14.         muc.revokeVoice("yy");  
    15.         //muc.grantVoice("yy");  
    16.     }  

    注冊

    1. private void testRegister(XMPPConnection conn) throws Exception {  
    2.         //能够直接改登陆用户的信息(假设是username的值必须和该用户的用户名同样)  
    3.         Registration r = new Registration();  
    4.         Map<String, String> attributes = new HashMap<String, String>();  
    5.         attributes.put("username""newuser");  
    6.         attributes.put("password""0");  
    7.         attributes.put("email""new00@126.com");  
    8.         attributes.put("name""name@192.168.1.100");  
    9.         //加入用户,要设置type类型为set。原因不明  
    10.         r.setType(IQ.Type.SET);  
    11.         r.setAttributes(attributes);  
    12.         //过滤器,用来过滤由server返回的信息(即得到注冊信息的内容)  
    13.         PacketFilter packetFilter = new AndFilter(new PacketIDFilter(r.getPacketID()), new PacketTypeFilter(IQ.class));  
    14.         PacketCollector collector = conn.createPacketCollector(packetFilter);   
    15.         System.out.println(r);  
    16.         conn.sendPacket(r);  
    17.         IQ result = (IQ) collector.nextResult();  
    18.         if(result == null) {  
    19.             System.out.println("server没有返回不论什么信息");  
    20.         } else {  
    21.         switch (result.getType().toString()) {  
    22.             case "result":  
    23.                 System.out.println("注冊成功");  
    24.                 break;  
    25.             case "error":  
    26.                 if(result.getError().toString().equalsIgnoreCase("conflict"))  
    27.                     System.out.println("用户名称已存在");  
    28.                 else   
    29.                     System.out.println("注冊失败");  
    30.                 break;  
    31.             default:  
    32.                 break;  
    33.             }  
    34.         }  
    35.     }  

    管理账号password

    1. private void testModifyPwd(XMPPConnection conn) throws Exception {  
    2.         //创建一个用户信息管理,能够创建新用户。或者改动用户密码  
    3.         AccountManager am = AccountManager.getInstance(conn);  
    4.         Collection<String> c = am.getAccountAttributes();  
    5.         for(String s : c) {  
    6.             System.out.println(s);  
    7.         }  
    8.         /* 
    9.          * 通过accountManager能够得到的属性 
    10.          *  username 
    11.             email 
    12.             registered 
    13.             name 
    14.             password 
    15.          */  
    16.         am.getAccountAttribute("username");  
    17.         am.createAccount("newUser""0");  
    18.         am.changePassword("00");  
    19.     }  


    至于细节,中遇到,我在程序代码描述


    参考博客:

    http://blog.csdn.net/shimiso/article/details/11225873
  • 相关阅读:
    memcache的最佳实践方案。
    ehcache memcache redis 三大缓存男高音
    微服务-----(网站架构演变)
    分布式job-任务调度(一)
    rocketmq(三 java操作rocket API, rocketmq 幂等性)
    rocketMQ(二 )Centos7 集群
    go基础三 数组,切片,map,list
    go语言基础二 函数 ,递归函数 ,指针
    go语言基础一:数据类型,变量和常量,类型转化
    Spring AOP 学习(一) 代理模式
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/4592972.html
Copyright © 2011-2022 走看看