title: How to send msg using Socket between two android devices.?
body: <p>Here is my code</p>
  
  <pre><code>@Override
  protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_server);
      serverStatus = (TextView) findViewById(R.id.server_status);
  
      SERVERIP = getLocalIpAddress();
  
      Thread fst = new Thread(new ServerThread());
      fst.start();
  }
  
  public class ServerThread implements Runnable {
  
      public void run() {
          try {
              if (SERVERIP != null) {
                  handler.post(new Runnable() {
                      @Override
                      public void run() {
                          serverStatus.setText("Listening on IP: " + SERVERIP);
                      }
                  });
                  serverSocket = new ServerSocket(SERVERPORT);
                  while (true) {
                      // listen for incoming clients
                      Socket client = serverSocket.accept();
                      handler.post(new Runnable() {
                          @Override
                          public void run() {
                              serverStatus.setText("Connected.");
                          }
                      });
  
                      try {
                          BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
                          String line = null;
                          while ((line = in.readLine()) != null) {
                              Log.d("ServerActivity", line);
                              handler.post(new Runnable() {
                                  @Override
                                  public void run() {
                                      // do whatever you want to the front end
                                      // this is where you can be creative
                                  }
                              });
                          }
                          break;
                      } catch (Exception e) {
                          handler.post(new Runnable() {
                              @Override
                              public void run() {
                                  serverStatus.setText("Oops. Connection interrupted. Please reconnect your phones.");
                              }
                          });
                          e.printStackTrace();
                      }
                  }
              } else {
                  handler.post(new Runnable() {
                      @Override
                      public void run() {
                          serverStatus.setText("Couldn't detect internet connection.");
                      }
                  });
              }
          } catch (Exception e) {
              handler.post(new Runnable() {
                  @Override
                  public void run() {
                      serverStatus.setText("Error");
                  }
              });
              e.printStackTrace();
          }
      }
  }
  
  // gets the ip address of your phone's network
  private String getLocalIpAddress() {
      try {
          for (Enumeration&lt;NetworkInterface&gt; en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) {
              NetworkInterface intf = en.nextElement();
              for (Enumeration&lt;InetAddress&gt; enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) {
                  InetAddress inetAddress = enumIpAddr.nextElement();
                  if (!inetAddress.isLoopbackAddress()) { 
                      boolean isIPv4 = InetAddressUtils.isIPv4Address(inetAddress.getHostAddress().toString());
                      if(isIPv4)
                      return inetAddress.getHostAddress().toString(); }
              }
          }
      } catch (SocketException ex) {
          Log.e("ServerActivity", ex.toString());
      }
      return null;
  }
  
  @Override
  protected void onStop() {
      super.onStop();
      try {
           // make sure you close the socket upon exiting
           serverSocket.close();
       } catch (IOException e) {
           e.printStackTrace();
       }
  }
  </code></pre>
  
  <p>Client Side</p>
  
  <pre><code>@Override
  protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_client);
  
      serverIp = (EditText) findViewById(R.id.server_ip);
      connectPhones = (Button) findViewById(R.id.connect_phones);
      connectPhones.setOnClickListener(connectListener);
  }
  
  private OnClickListener connectListener = new OnClickListener() {
  
      @Override
      public void onClick(View v) {
          if (!connected) {
              Log.e("Clicked", "Yes");
              serverIpAddress = serverIp.getText().toString();
              if (!serverIpAddress.equals("")) {
                  Thread cThread = new Thread(new ClientThread());
                  cThread.start();
              }
          }
      }
  };
  
  public class ClientThread implements Runnable {
  
      public void run() {
          try {
              InetAddress serverAddr = InetAddress.getByName(serverIpAddress);
              Log.d("ClientActivity", "C: Connecting...");
              Socket socket = new Socket(serverAddr, ServerActivity.SERVERPORT);
              connected = true;
              while (connected) {
                  try {
                      Log.d("ClientActivity", "C: Sending command.");
                      PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket
                                  .getOutputStream())), true);
                          // where you issue the commands
                          out.println("Hey Server!");
                          Log.d("ClientActivity", "C: Sent.");
                  } catch (Exception e) {
                      Log.e("ClientActivity", "S: Error", e);
                  }
              }
              socket.close();
              Log.d("ClientActivity", "C: Closed.");
          } catch (Exception e) {
              Log.e("ClientActivity", "C: Error", e);
              connected = false;
          }
      }
  }
  }
  </code></pre>
  
  <p>I have used that between two emulators the server is showing that it is listening on 10.0.2.15</p>
  
  <p>But when i go for connection it does not connect</p>
  
  <p>Thers is no error in logcat
  also i have checked between two physical devices
  running Android 4.0 with 3G internet
  Just want to push the android devices running server activity from client activity so that i can perform a action when client send something.</p>
  
  <p>Nothing happens when i click connect button</p>
  
  <p>Permissions:</p>
  
  <pre><code>  &lt;uses-permission android:name="android.permission.INTERNET" /&gt;
  </code></pre>