2012-02-13 14 views
8

ソケットを介してローカルサーバーと通信するアンドロイドアプリを作成しようとしています。通信は、JSONを使用して文字列で単純なコマンドとデータを渡します。クライアントは、サーバーからの受信メッセージを常に聞き、新しいデータが受信されたときにユーザーインターフェイスを更新する必要があります。Androidはサーバーソケットからのメッセージを受信します

私はバックグラウンドで実行されているバインドされたサービスであるネットワークサービスを作成しました。私の活動から私はサービスにバインドし、サービスオブジェクトのインスタンスを受け取ります。サービスオブジェクトには、サーバーにコマンドを送信するためのインスタンスメソッドが含まれています。

私の問題は、サーバーにメッセージを送信する可能性を遮断せずに、サービスがサーバーからのメッセージを常に聴取できるようにするにはどうすればいいですか?

private Socket socket = null; 
private PrintWriter out = null; 
private BufferedReader in = null; 

private Listener listener; 

private String host = "10.0.1.4"; 
private int port = 3000; 

public NetworkService() 
{ 
    try { 

     if (socket == null) 
     { 
     socket = new Socket(this.host, this.port); 
     out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true); 
     in = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
     } 

     if(listener == null) 
     { 
      listener = new Listener(); 
      Thread thread = new Thread(listener); 
      thread.start(); 
     } 

     } catch (Exception e) { 
      // ... 
     } 
    } 
} 

public class Listener implements Runnable 
{ 

    @Override 
    public void run() { 

     try { 
      String line = null; 

      while((line = in.readLine()) != null) 
       { 
       // Do something. Never gets here 

       } 
      } catch (Exception e) { 
       // ... 
      } 

     } 

    } 
+0

ワットが意味します。アプリケーションが実行されているときや特定の期間、またはアプリケーションがサイレントモードになっているとき(アプリケーションがバックグラウンドで実行されているとき)にこれらのプロセスを実行したいのですか? – Sniper

+0

いつでも私はサービスを利用できる必要がありますアプリケーションを使用しています。私はサーバーに単純な文字列コマンドを送ることができる必要があり、私はサーバーからデータを受け取ることができる必要があります。 –

+0

アプリケーションの終了時まで、または一定期間、応答フォームサーバーを取得したいですか。 – Sniper

答えて

4

サービスでは、サーバーを待機するスレッドを1つ作成できます。 2番目のスレッドはコマンドを送信するためのスレッドです。あなたのサービスのために、その中にハンドラを持つメインスレッドを作成する必要があります。このハンドラは、この2つのスレッドからのメッセージを処理します。

+0

これも私の最初の考えでした。私は、whileループが即座に終了するように見えるが、whileループはinputstreamのreadlineでブロックして、私のサービスのコンストラクタで新しいスレッドを開始しようとした。私の編集を参照してください –

+0

さて、すべてを削除して、このアプローチをやり直してください。今それは動作します。 –

関連する問題