title: Android client and Java server TCP communication
body: <p>I'm developing an Android application (client) and want it to connect with my Java server using TCP communication. </p>
  
  <p>I've done the code - simple program, client send a message and server echos it back - as below:</p>
  
  <p>Server code:</p>
  
  <pre><code>    import java.net.*;
  
  
  public class Server {
  
      public static void main(String[] args) {
  
          int nreq = 1;
          try
          {
              ServerSocket sock = new ServerSocket (8080);
              for (;;)
              {
                  Socket newsock = sock.accept();
                  System.out.println("Creating thread ...");
                  Thread t = new ThreadHandler(newsock,nreq);
                  t.start();
              }
          }
          catch (Exception e)
          {
              System.out.println("IO error " + e);
          }
          System.out.println("End!");
      }
  }
  </code></pre>
  
  <p>a Thread Handler code in the same project file of the server:</p>
  
  <pre><code>    import java.io.*;
  import java.net.*;
  
  class ThreadHandler extends Thread {
      Socket newsock;
      int n;
  
      ThreadHandler(Socket s, int v) {
          newsock = s;
          n = v;
      }
  
  
      public void run() {
          try {
  
              PrintWriter outp = new PrintWriter(newsock.getOutputStream(), true);
              BufferedReader inp = new BufferedReader(new InputStreamReader(
                      newsock.getInputStream()));
  
              outp.println("Hello :: enter QUIT to exit \n");
              boolean more_data = true;
              String line;
  
              while (more_data) {
                  line = inp.readLine();
                  System.out.println("Message '" + line + "' echoed back to client.");
                  if (line == null) {
                      System.out.println("line = null");
                      more_data = false;
                  } else {
                      outp.println("From server: " + line + ". \n");
                      if (line.trim().equals("QUIT"))
                          more_data = false;
                  }
              }
              newsock.close();
              System.out.println("Disconnected from client number: " + n);
          } catch (Exception e) {
              System.out.println("IO error " + e);
          }
  
      }
  }
  </code></pre>
  
  <p>And this is the Client side (Android):</p>
  
  <pre><code>package com.android.client;
  
  import java.io.BufferedReader;
  import java.io.IOException;
  import java.io.InputStreamReader;
  import java.io.PrintWriter;
  import java.net.Socket;
  import java.util.Scanner;
  
  import android.app.Activity;
  import android.os.Bundle;
  import android.view.View;
  import android.widget.Button;
  import android.widget.EditText;
  import android.widget.TextView;
  
  public class Client extends Activity {
      /** Called when the activity is first created. */
      Scanner scanner = new Scanner(System.in);
  
      @Override
      public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.main);
  
          final EditText msg = (EditText) findViewById(R.id.etMsg);
          Button send = (Button) findViewById(R.id.bSend);
          final TextView convo = (TextView) findViewById(R.id.tvConvo);
          final TextView status = (TextView) findViewById(R.id.tvStatus);
  
          try {
              send.setOnClickListener(new View.OnClickListener() {
  
                  Socket s = new Socket("localhost", 8080);
                  String message = msg.getText().toString();
  
                  @Override
                  public void onClick(View v) {
                      status.setText("...");
                      PrintWriter outp = null;
                      BufferedReader inp = null;
                      status.setText("Established connection..");
                      String serverMsg = null;
  
                      try {
                          outp = new PrintWriter(s.getOutputStream(), true);
                          inp = new BufferedReader(new InputStreamReader(s.getInputStream()));
                          serverMsg = inp.readLine();
                      } catch (IOException e) {
                          e.printStackTrace();
                      }
                      convo.append(serverMsg + "\n");
  
                      if (message != null) {
                          if (msg.getText().toString().trim() == "QUIT") {
                              try {
                                  s.close();
                              } catch (IOException e) {
                                  e.printStackTrace();
                              }
                              status.setText("Disconnected from server.");
  
                          } else {
                                  try {
  
                                      convo.append(message + "\n");
                                      outp.println(message); 
                                      serverMsg = inp.readLine();
                                      convo.append(serverMsg + "\n");
                                  } catch (IOException e) {
                                      e.printStackTrace();
                                  }
                          }
  
                      }
                      else
                          status.setText("Problem in connection..!");
                  }
              });
          } catch (IOException e) {
              e.printStackTrace();
          }
      }
  }
  </code></pre>
  
  <p>And this is the XML file:</p>
  
  <pre><code>&lt;?xml version="1.0" encoding="utf-8" ?&gt; 
  - &lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical"&gt;
    &lt;TextView android:id="@+id/tvText" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Your message here:" /&gt; 
  - &lt;EditText android:id="@+id/etMsg" android:layout_width="match_parent" android:layout_height="wrap_content" android:ems="10"&gt;
    &lt;requestFocus /&gt; 
    &lt;/EditText&gt;
    &lt;TextView android:id="@+id/tvStatus" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Status..." android:textAppearance="?android:attr/textAppearanceSmall" /&gt; 
    &lt;Button android:id="@+id/bSend" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Send" /&gt; 
    &lt;TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Conversation:" android:textAppearance="?android:attr/textAppearanceLarge" /&gt; 
    &lt;TextView android:id="@+id/tvConvo" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="" /&gt; 
    &lt;/LinearLayout&gt;
  </code></pre>
  
  <p>I tried running it, but nothing happens. When I click the button the TextView doesn't view the "Hello" message from the server.</p>