0

私は、現在実際に機能するグローバル Leadbord 用のサーバーを作成しました。アクティブな場合は、データを送信できます。しかし、ダウンしてもアプリは停止しません。私はそれに対する解決策を得られません。あなたが私を助けてくれることを願っています。送信は次のとおりです。

public void saveToDatabase(LeadboardElement element2) {
    final LeadboardElement element = element2;
    send = false;
    // Need to be a thread! else android blocks it because it could take to
    // long to send!
    this.thread = new Thread() {
        public void run() {
            try {
                Socket soc = new Socket(Config.TCP_SERVERNAME_IP,
                        Config.TCP_PORT);
                DataOutputStream out = new DataOutputStream(
                        soc.getOutputStream());
                DataInputStream in = new DataInputStream(
                        new BufferedInputStream(soc.getInputStream()));

                // to call the save statement!
                out.writeInt(0);
                // give the stuff
                out.writeUTF(element.getName());
                out.writeInt(element.getLevel());
                out.writeInt(element.getKillPoints());

                // close it
                out.close();
                in.close();
                soc.close();
                send = true;
                //join at every error
            } catch (UnknownHostException e) {
                e.printStackTrace();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    };
    // start it
    thread.start();

    // join thread
    if (!send) {
        boolean retry = true;
        while(retry)
        try {
            this.thread.join();
            retry = false;
            Log.w(TAG, "sending to server stopped!");
        } catch (InterruptedException e2) {
            Log.w(TAG, "Thread could not be joined");
        }
    }
}

API 5以降、スレッドで実行する必要があることに気付いたので、このように機能します。プレイヤーが画面に触れた場合、ゲームの最後に呼び出されます。すべてが停止し、データがサーバーに送信されます。彼がダウンしている場合は機能しません。フェード トゥ ブラックで立ち往生しています。タイムアウトのようなものが必要だと思います。で試してみましたCountDownTimerが、実際には問題は解決しません。

どうもありがとう!

4

1 に答える 1

2

ソケットの初期化方法を変更すると、タイムアウトを設定できます。

Socket s1 = new Socket();
s1.setSoTimeout(200);
s1.connect(new InetSocketAddress("192.168.1." + i, 1254), 200);

新しいソケットの作成時にタイムアウトを追加します

于 2013-01-23T12:34:07.807 に答える