2016-04-25 61 views
0

我正在製作一個Android應用程序,用於每隔X分鐘檢查一次TCP/IP服務器套接字是否已在我的計算機上打開。如果是,它會連接並從中讀取數據,如果沒有,則等待並嘗試再次在X分鐘內連接...Android Studio:檢查服務器插座是否每隔X分鐘開啓/收聽

下面的代碼在我首先打開服務器然後客戶端時運行一次(手動),但我無法讓客戶端根據時間繼續檢查服務器套接字是否打開/收聽。異步方法將無法正常工作,因爲我不能拖延它,並且無法使Handler方法正常工作。

CheckserversocketeveryXmin.java

public class AppListener extends Async { 

@Override 
public void handleMessage(Message msg) { 

    final Handler h = new Handler(); 
    final int delay = 5000; //milliseconds 

    h.postDelayed(new Runnable() { 
     public void run() { 


      try { 

       String msg_received = null; 

       System.out.println("LISTENING FOR LAST INSTALLED APP"); 


       System.out.println("TRY"); 

       Socket socket = new Socket("85.190.178.23", 5050); 

       // Get data sent through socket 
       DataInputStream DIS = new DataInputStream(socket.getInputStream()); 

       System.out.println("DataInputStream Started"); 

       // read data that got sent 
       msg_received = DIS.readUTF(); 

       System.out.println("Message from server" + msg_received); 

       // Might not want to close socket, or only the first string will be sent and none after 
       socket.close(); 


      } catch (Exception e) { 
       System.out.println("Did not receive string"); 
      } 


      h.postDelayed(this, delay); 
     } 
    }, delay); 

} 

} 

現在我可以takling這種錯誤,把這個代碼放到我的主要活動,由於某種原因,改掉每x秒,但從來沒有在那裏這裏不連接它如果我刪除了延遲,則連接一次。

會在一個異步(我知道這不是技術上很好)和一個等待/延遲是一個好方法無限循環?如果是這樣,做任何你有一個指針:)

回答

0

把這個代碼到我的主要活動,由於某種原因,它會嘗試每x秒,但從來不連接

你可能SDK 11 +,所以你的處理程序拋出NetworkOnMainThreadException,你在你的catch塊吞嚥

這裏那裏它連接一次,如果我刪除延遲

你在handleMessage裏聲明瞭你的Handler變量,所以在將你的runnable發佈到句柄後,立即刪除對它的所有引用;它可能被垃圾收集。讓你的兩個變量成員變量在你的AppListener類中

+0

謝謝!它幫助:) – Emil