2012-07-04 232 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