XMPP 中客戶端斷線及網絡異常處理


1.網上關於網絡斷線這個問題的處理的資料確實很少。有寫說在Mina的框架里修改Session close.但都沒有給出相關的處理。對於一個不是深入了解那框架的人,確實是件不容易的事情。

2.下面給出一個自己的處理方案.

就是利用Connection的ConnectionListener.

下面是具體寫法

mConnection.addConnectionListener(new ConnectionListener() {
			//當網絡斷線了,重新連接上服務器觸發的事件
			@Override
			public void reconnectionSuccessful() {
				// TODO Auto-generated method stub
				System.out.println("reconnectionSuccessful");
				
			}
			//重新連接失敗
			@Override
			public void reconnectionFailed(Exception arg0) {
				// TODO Auto-generated method stub
				System.out.println("reconnectionFailed");
				
			}
			//重新連接的動作正在進行的動作,里面的參數arg0是一個倒計時的數字,如果連接失敗的次數增多,數字會越來越大,開始的時候是14
			@Override
			public void reconnectingIn(int arg0) {
				System.out.println("time: "+arg0);
				// TODO Auto-generated method stub
				System.out.println("reconnectingIn");
				
			}
			//這里就是網絡不正常斷線激發的事件
			@Override
			public void connectionClosedOnError(Exception arg0) {
				// TODO Auto-generated method stub
				System.out.println("connectionClosedOnError");
				
			}
			//這里是正常關閉連接的事件
			@Override
			public void connectionClosed() {
				// TODO Auto-generated method stub
				System.out.println("connectionClosed");
				
			}
		});

  不是像上面那樣,add了一個Listener搞定了,你要觸發這個listener就要在你想判斷聯網是否正常的時候,使用一下XMPPConnection.isConnected()這個方法。

他就會自動檢測這個Connection並且處理Listener里面的事件

可以寫一個線程來專門檢測比如:

new Thread(){
			public void run() {
				while(true){
					try {
						sleep(3*1000);
						System.out.println("thread  info con: "+mConnection.isConnected());
				
					} catch (InterruptedException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}
			};
		}.start();

  這就是3秒檢測一下,就不用去修改Openfire了,Connection默認的情況下是會自動連接上去的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM