Java 如果客户端已经连接,如何断开连接

Java 如果客户端已经连接,如何断开连接,java,Java,我正在使用smack API和使用java的Make 2客户端,我在windows平台上使用prosody XMPP服务器这是我的代码(prosody与open fire服务器非常相似) 我得到了答案。我必须从main()调用disconnect()方法 这是可行的&在o/p中没有得到任何异常通常,如果我们能看到异常我得到这个异常:stream:error(text)在org.jivesoftware.smack.PacketReader.parsePackets(PacketReader.ja

我正在使用smack API和使用java的Make 2客户端,我在windows平台上使用prosody XMPP服务器这是我的代码(prosody与open fire服务器非常相似)


我得到了答案。我必须从main()调用disconnect()方法


这是可行的&在o/p中没有得到任何异常

通常,如果我们能看到异常我得到这个异常:stream:error(text)在org.jivesoftware.smack.PacketReader.parsePackets(PacketReader.java:260)在org.jivesoftware.smack.PacketReader.access$000(PacketReader.java:43)在org.jivesoftware.smack.PacketReader$1.run(PacketReader.java:70)伙计们,如果你对此有任何想法,请建议我你的第二个连接可能正在尝试使用与原始连接相同的凭据连接到目标。尝试使用不同的凭据。不,实际上,在这里,每当我第一次登录时,我只显示一个客户端(表示客户端未联机)那么好吧,但如果客户端已经联机,那么我会遇到异常……无论我在这里的问题中显示了什么,我都试图使用onTimerExpiry()方法断开客户端的连接,但我的客户端没有断开连接
import java.util.Collection;
import org.jivesoftware.smack.Chat;
import org.jivesoftware.smack.ConnectionConfiguration;
import org.jivesoftware.smack.MessageListener;
import org.jivesoftware.smack.Roster;
import org.jivesoftware.smack.RosterEntry;
import org.jivesoftware.smack.SASLAuthentication;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.packet.Message;

public class TextMessageReceive implements MessageListener {

    XMPPConnection connection;

    public void login(String userName, String password)throws XMPPException{
        ConnectionConfiguration config = new ConnectionConfiguration("localhost",5222,"example.com");
                config.setSASLAuthenticationEnabled(true);   
                config.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled);
                SASLAuthentication.supportSASLMechanism("PLAIN", 0);
                connection = new XMPPConnection(config);
                //connection.connect();
                //          System.out.println("Connected to " + connection.getHost());
                //connection.login(userName, password);
                onTimerExpiry(userName, password);
                System.out.println("Logged in as " + connection.getUser());
        }
    public void onTimerExpiry(String userName, String password)  {
        if (connection != null && connection.isConnected()) {
            connection.disconnect();
            System.out.println("disconnecting...................");
        }
        try{
          if (connection != null) {
              connection.connect();
              System.out.println("Logged in as " + connection.getHost());
              connection.login(userName, password);
              System.out.println("Logged in as " + connection.getUser());
              }
          }catch(XMPPException e){
            e.printStackTrace();
        }
    }

    public void sendMessage(String message, String to) throws XMPPException{

        Chat chat = connection.getChatManager().createChat(to, this);
        chat.sendMessage(message);
        System.out.println("message=    "+message+ "    received from   " +to );
     }

    public void displayBuddyList(){
        Roster roster = connection.getRoster();
        Collection<RosterEntry> entries = roster.getEntries();

        System.out.println("\n\n" + entries.size() + " buddy(ies):");
        for(RosterEntry r:entries){
            System.out.println(r.getUser());
        }
    }

    public void disconnect(){
        connection.disconnect();
    }

    public void processMessage(Chat chat, Message message){
        System.out.println("Inside the process message");
        String string =message.getBody();
        String from=message.getFrom();
        //      byte[] byteArray = Base64.decodeBase64(string.getBytes());
        //      if(message.getType() == Message.Type.chat)
        //      {
        ////      // Print the decoded string 
        //          String decodedString = new String(byteArray);
        //    System.out.println( "Decoded message = " + decodedString);

        System.out.println("message=    "+string+ "  received from  " +from );
    }

    public static void main(String args[]) throws XMPPException {
        TextMessageReceive c = new TextMessageReceive();

        // turn on the enhanced debugger
        XMPPConnection.DEBUG_ENABLED = true;
        // Enter your login information here
        c.login("yuvi", "yuvi");
        /*
         * Displays the users list
         */
        //c.displayBuddyList();


        try{
            Thread.sleep(30000);
            String string ="We are sending message to mhealth";
            //      byte[] byteArray = Base64.encodeBase64(string.getBytes());
            //      String encodedString = new String(byteArray);
            c.sendMessage(string, "mhealth@example.com");
            // Print the encoded string         
            System.out.println( "Message = " + string);
            //        c.sendMessage("Message coming from yuvi", "yuvi@inpudw014438a");
        }catch (Exception e) {
            e.printStackTrace();
        }
    }
}
stream:error (text) at 
org.jivesoftware.smack.PacketReader.parsePackets(PacketReader.java:260) at 
org.jivesoftware.smack.PacketReader.access$000(PacketReader.java:43) at 
org.jivesoftware.smack.PacketReader$1.run(PacketReader.java:70)
   public static void main(String args[]){
       TextMessageReceive c = new TextMessageReceive();

            // turn on the enhanced debugger
            XMPPConnection.DEBUG_ENABLED = true;
            // Enter your login information here
            c.login("yuvi", "yuvi");
            c.disconnect();
            /*
             * Displays the users list
             */
}