2012-07-04 233 views
0

我正在嘗試編寫一種方法,它將通過3G網絡與基站發送消息到服務器。 IM試圖多次發送消息,直到我決定停止。但是當我測試它時,它會在短時間後停止並停止發送消息。有人知道爲什麼通過3G網絡發送數據包

private Runnable commRunnable = new Runnable() { 
public void run() { 
    try { 
     String message = "Just saying hello!"; 
     PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true); 

     String startReceivingMessage = "Begin sending me data."; 
     String stopReceivingMessage = "Stop sending me data."; 

     startSend = false; 
     stopSend = false; 
     startReceive = false; 
     stopReceive = false; 

     while (!shouldDisconnect) { 
      if (startSend) { 
       sendData = true; 
       startSend = false; 
      } 
      if (stopSend) { 
       sendData = false; 
       stopSend = false; 
      } 

      // Send a message that the server should start transmitting data 
      // back to us. We only need to transmit this message once. 
      if (startReceive) { 
       out.println(startReceivingMessage); 
       startReceive = false; 
       receiveData = true; 
       Thread receiveThread = new Thread(receiveRunnable); 
       receiveThread.start(); 

      // Tell the server to stop transmitting data. 
      } else if (stopReceive) { 
       out.println(stopReceivingMessage); 
       stopReceive = false; 
       receiveData = false; 
      } 

      if (sendData) { 
       out.println(message); 
      } 

      Thread.sleep(20); 
     }        
    } catch (Exception e) { 
     Log.e("PowerMonitor", e.toString()); 
    } finally { 
     try { 
      socket.close(); 
      connected = false; 
     } catch (Exception e) { 
      Log.e("PowerMonitor", e.toString()); 
     } 
    } 
} 

};

private Runnable receiveRunnable = new Runnable() { 
    @Override 
    public void run() { 
     try { 
      BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
      String reply = ""; 
      Log.d("PowerMonitor", "Starting to receive"); 
      while (receiveData) { 
       Log.d("PowerMonitor", "Listening..."); 
       reply = in.readLine(); 
       Log.d("PowerMonitor", "Got message: " + reply); 
      } 
     } catch (Exception e) { 
      Log.e("PowerMonitor", e.toString()); 
     } 
    } 
}; 
+0

你是什麼意思'停止'?退出還是掛起?如果它掛了,你做了一個線程轉儲(Ctrl + Break)嗎? –

+0

我想我們需要看到更多的代碼才能知道這裏發生了什麼。你可以發佈你的receiveRunnable的代碼嗎? (假設啓動它的標誌被設置,當然...) – Jules

+0

@Jules這裏是接收Runnable – user1465975

回答

0

我們需要更多的代碼,以便更好地理解你的問題,但是從你這裏張貼的代碼它看起來像座正在由finally

socket.close(); 

電話關閉。 同時告訴你所得到的任何錯誤。

+0

我不會說任何錯誤,它只是簡單的超時。我正在跟蹤使用WireShark發送的數據包,並且它們正在發送,然後在大約20-30秒後,它們停止發送 – user1465975