2016-08-04 9 views
1

私は、人々がそれらの間でファイルを共有できるようにするアプリをやっています。今はテキストを共有しようとしていますが、すぐにファイルに変更します。しかし、ソケット接続を作成する際に問題が発生しています(2つのデバイスはすでにホットスポット経由で接続されています。そのうちの1つはホットスポットであり、もう1つはホットスポットです)。Android - サーバーとクライアント間でデータを送信する

私は通常のJavaソケット接続を行うつもりでしたが、電話がスリープ状態になるとソケットが閉じる/タイムアウトすることをここで読みました。その問題のためにあなたが推薦する解決策は、インテント・サービスを使用することでした。

ClientCommServiceとServerCommServiceの2つのIntentServicesを作成しました。私は、onHandleIntent()メソッドの中で、ソケットを作成し、受信メッセージを待ち受ける/開始する(ストリームオブジェクトを作成してソケットを開始する)べきだと考えています。私の問題は、私もメッセージを送信したいと私は、メッセージをthis.out.writeObject()を送信するロジックを配置する必要がありますかわからないです。 メンバー(サーバーまたはクライアント)のいずれかによって開始できる双方向通信を作成したいので、これは重要です。

質問2:私がここでstackoverflowで見たいくつかのアプローチでは、Server用のIntentServiceしか作成されませんでした。どうして?

答えて

0

携帯電話がスリープ状態になってもサービスを維持したい場合は、IntentServiceの代わりにServiceを作成する必要があります。

また、サービスをSTICKYサービスとして維持する必要があります。

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 

    return START_STICKY; 
} 

このサービスはメインスレッドで実行されているため、コードを処理する必要はありません.UIスレッドは中断されません。

クライアント/サーバーロジックをonStartCommandメソッドに入れることができます。

+0

IntentServiceが機能しないのですか?ところで、私はどこに送信ロジックを置くべきですか?私は双方向の接続が必要です.. あなたの助けをありがとう –

+0

IntentServiceはキューを管理していますので、FIFOシステムになりますが、あなたのケースではそれ以上の操作が1つあります。 onStartCommandメソッド内にクライアント・サーバー・ロジックを書き込むことができます。クライアントとサーバー・ロジックは独立して呼び出します。 – dhams

+0

アップデート:onStartCommandのロジックを置くことができません。なぜなら、それはnetworkonmainthread例外を与えるからです。私はそれを動作させることができたが、今は別の問題を抱えている。実際には、サービス内に2つのスレッドがある(異なる時間に起動される)ので、すでに使用中のソケットに問題がある。 –

関連する問題