【问题标题】:sending packet over 3G network通过 3G 网络发送数据包
【发布时间】:2012-07-04 08:42:55
【问题描述】:

我正在尝试编写一种方法,该方法将通过带有基站的 3G 网络向服务器发送消息。 IM 尝试多次发送消息,直到我决定停止。但是当我对此进行测试时,它总是在短时间内停止并停止发送消息。有人知道为什么吗?

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());
        }
    }
};

【问题讨论】:

  • “停止”是什么意思?退出还是挂起?如果它挂起,您是否进行过线程转储(Ctrl+Break)?
  • 我认为我们需要查看更多代码才能知道这里发生了什么。你也可以发布你的receiveRunnable的代码吗? (假设启动它的标志被设置,当然......)
  • @Jules 这是接收 Runnable
  • 我在第一部分下面添加了谢谢!!
  • 您的应用程序是否停留在前台?你如何防止设备进入睡眠状态?日志中显示了什么?

标签: java networking communication


【解决方案1】:

我们需要您的更多代码才能更好地理解您的问题,但从您在此处发布的代码来看,似乎套接字正在被关闭

socket.close();

调用finally 块。 还要说明您遇到的任何错误。

【讨论】:

  • 我没有得到任何错误,只是超时。我正在跟踪使用 WireShark 发送的数据包,它们正在发送,然后大约 20-30 秒后它们停止传输
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-15
  • 1970-01-01
  • 1970-01-01
  • 2015-06-29
  • 2011-10-16
  • 1970-01-01
相关资源
最近更新 更多