0

基地局を使用して 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());
        }
    }
};
4

1 に答える 1

0

あなたの質問をよりよく理解するためにあなたのコードがもっと必要ですが、あなたがここに投稿したコードから、ソケットがによって閉じられているようです

socket.close();

ブロックで呼び出しfinallyます。また、発生しているエラーについても教えてください。

于 2012-07-04T09:07:41.980 に答える