2017-03-24 17 views
-1

クライアントのように動作するアンドロイドアプリケーションを作成しようとしていますが、私が直面している問題はサーバーから文字列データを受け取っている間にアプリケーションが初めて受信することです。そして、ソケットを再接続すると、アプリケーションは再びデータを受信します。BufferedReader.readline()は一度しか動作しません

私はサーバーとしてソケットプロトコルappを使用しています。メッセージの最後に改行文字を送信しています。データをサーバーに送り返すことができるので、接続さえも有効です。

は、ここで私は接続を作成]ボタンをクリックしたときに

public class MainActivity extends AppCompatActivity { 

Thread m_thread; 
Socket clientSocket; 
PrintWriter out; 
boolean fan=false,socket=false,light1=false,light2=false,m_run=false; 
int quantity = 0; 
String msg; 
BufferedReader in = null; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
} 

public void Start(View view) { 
    m_thread = new Thread(new Runnable() { 
     @Override 
     public void run() { 
      m_run = true; 
      try { 
       clientSocket = new Socket("192.168.1.34", 2001); 
       try { 
        out = new PrintWriter(new BufferedWriter(new  OutputStreamWriter(clientSocket.getOutputStream()))); 
        out.println("Client Connected"); 
        out.flush(); 
        in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); 
        TextView srv_message = (TextView) findViewById(R.id.messageTextView); 
        while(m_run) 
        { 
         if(msg!=null) 
         { 

          srv_message.setText(""+msg); 
         } 
         msg = null; 
        } 
       }catch (Exception e){ 
        e.printStackTrace(); 
       } 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 
    m_thread.start(); 
} 

Startメソッドが呼び出されたコードです。このコードを使用し

答えて

1

、それはまた、私のために動作します。私は、サーバーにこのアプリからメッセージを送信するとき

input = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); 
while (!Thread.currentThread().isInterrupted()) 
{ 
      try 
      { 
       read = input.readLine(); 
       if (read != null) { 
        // take a handler to Toast the message 
       } 
      } 
      catch (Exception e) 
      { 
       e.printStackTrace(); 
      } 
} 
+0

あなたのコードは、サーバアプリは二回メッセージを受信し、別のものがある –

+0

動作します。それは "クライアント接続"を2回受け取ります。あなたはいくつかの変更を提案することができます –

+0

私は同じ問題に直面していたこのリンクに従ってください:https://www.youtube.com/watch?v=QVq2IGg5ZFM –

0
BufferedReader reader = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); 
StringBuilder result = new StringBuilder(); 
String line; 
while ((line = reader.readLine()) != null) { 
    result.append(line); 
} 

srv_message.setText(""+result); 
関連する問題