title: Connect android client to be C# server
body: <p>I developed small client server (client in Android to send data) and server in PC (receive data and print it out), it works only one time (by sending data from android device to pc) the I should close the android app and run it again? 
  by the way I have client app in PC it works properly, I can send from it and the server receives but for the client in android!</p>
  
  <p>here is the android code:</p>
  
  <pre><code>    public class MainActivity extends Activity {
  
      private TCPClient mTcpClient;
  
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_main);
          final EditText editText = (EditText) findViewById(R.id.edit_message);
          Button send = (Button)findViewById(R.id.send_button);        
  
          // connect to the server
          new connectTask().execute("");
  
          send.setOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick(View view) {
  
                  String message = editText.getText().toString(); 
  
                  //sends the message to the server
                  if (mTcpClient != null) {
                      mTcpClient.sendMessage(message);
                  }
  
                  editText.setText("");
              }
          });
      }
  
      @Override
      public boolean onCreateOptionsMenu(Menu menu) {
  
          getMenuInflater().inflate(R.menu.main, menu);
          return true;
      }
  
      public class connectTask extends AsyncTask&lt;String,String,TCPClient&gt; {
  
          @Override
          protected TCPClient doInBackground(String... message) {
  
              mTcpClient = new TCPClient(new TCPClient.OnMessageReceived() {
                  @Override
  
                  public void messageReceived(String message) {
  
                      publishProgress(message);
                  }
              });
              mTcpClient.run();
  
              return null;
          }
  
          @Override
          protected void onProgressUpdate(String... values) {
              super.onProgressUpdate(values); 
          }
      }
    }
  </code></pre>
  
  <p>and the TCPClient class:</p>
  
  <pre><code>    public class TCPClient {
  
      private String serverMessage;
      public static final String SERVERIP = "192.168.0.104"; 
      public static final int SERVERPORT = 4444;
      private OnMessageReceived mMessageListener = null;
      private boolean mRun = false;
  
      PrintWriter out;
      BufferedReader in;
      DataOutputStream dataOutputStream = null;
  
      //OutputStream os;
  
      public TCPClient(OnMessageReceived listener) {
          mMessageListener = listener;
      }
  
      public void sendMessage(String message){
          if (out != null &amp;&amp; !out.checkError()) {
  
              /*
              String toSend = "a";
              byte[] toSendBytes = toSend.getBytes();
  
              int toSendLen = toSendBytes.length;
              byte[] toSendLenBytes = new byte[4];
              toSendLenBytes[0] = (byte)(toSendLen &amp; 0xff);
              toSendLenBytes[1] = (byte)((toSendLen &gt;&gt; 8) &amp; 0xff);
              toSendLenBytes[2] = (byte)((toSendLen &gt;&gt; 16) &amp; 0xff);
              toSendLenBytes[3] = (byte)((toSendLen &gt;&gt; 24) &amp; 0xff);
              try {
                  os.write(toSendLenBytes);
              } catch (IOException e1) {
                  // TODO Auto-generated catch block
                  e1.printStackTrace();
              }
  
              try {
                  os.write(toSendBytes);
              } catch (IOException e) {
                  // TODO Auto-generated catch block
                  e.printStackTrace();
              }
              */
             out.print(message);            
             out.flush();           
  
  
          }
      }
  
      public void stopClient(){
          mRun = false;
      }
  
      public void run() {
  
          mRun = true;
  
          try {
  
              InetAddress serverAddr = InetAddress.getByName(SERVERIP);
  
              Log.e("TCP Client", "C: Connecting...");
  
              Socket socket = new Socket(serverAddr, SERVERPORT);    
  
              ///
              //os = socket.getOutputStream();
  
              if(socket.isBound()){
                  Log.i("SOCKET", "Socket: Connected");            
              }
              else{
                  Log.e("SOCKET", "Socket: Not Connected");
              }
              try {
  
                  out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);
  
                  /*
                  dataOutputStream = new DataOutputStream(socket.getOutputStream());
                  byte[] bytes = new byte[] {1}; 
                  dataOutputStream.write(bytes, 0, bytes.length);
                  */
                  Log.e("TCP Client", "C: Sent.");                
  
                  Log.e("TCP Client", "C: Done.");
  
                  if(out.checkError())
                  {
                      Log.e("PrintWriter", "CheckError");
                  }
  
                  in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
  
                  while (mRun) {
                      serverMessage = in.readLine();
  
                      if (serverMessage != null &amp;&amp; mMessageListener != null) {
                          mMessageListener.messageReceived(serverMessage);
                      }
                      serverMessage = null;
  
                  }
  
  
                  Log.e("RESPONSE FROM SERVER", "S: Received Message: '" + serverMessage + "'");
  
  
              } catch (Exception e) {
  
                  Log.e("TCP", "S: Error", e);
  
              } finally {
  
                  socket.close();
              }
  
          } catch (Exception e) {
  
              Log.e("TCP", "C: Error", e);
  
          }
  
      }
  
      public interface OnMessageReceived {
          public void messageReceived(String message);
      }
  
  }
  </code></pre>
  
  <p>finally the C# server code:</p>
  
  <pre><code>class Program
  {
      static Socket listeningSocket;
      static Socket socket;
      static Thread thrReadRequest;
      static int iPort = 4444;
      static int iConnectionQueue = 100;
  
      static void Main(string[] args)
      {
          Console.WriteLine(IPAddress.Parse(getLocalIPAddress()).ToString());
          try
          {                
              listeningSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
              //listeningSocket.Bind(new IPEndPoint(0, iPort));                                
              listeningSocket.Bind(new IPEndPoint(IPAddress.Parse(getLocalIPAddress()), iPort));
              listeningSocket.Listen(iConnectionQueue);
  
              thrReadRequest = new Thread(new ThreadStart(getRequest));
              thrReadRequest.Start();
          }
          catch (Exception e)
          {
              Console.WriteLine("Winsock error: " + e.ToString());
              //throw;
          }            
      }
  
      static private void getRequest()
      {
          int i = 0;
          while (true)
          {
              i++;
              Console.WriteLine("Outside Try i = {0}", i.ToString());
  
              try
              {
                  socket = listeningSocket.Accept();
  
                  // Receiving
                  //byte[] rcvLenBytes = new byte[4];
                  //socket.Receive(rcvLenBytes);
                  //int rcvLen = System.BitConverter.ToInt32(rcvLenBytes, 0);
                  //byte[] rcvBytes = new byte[rcvLen];
                  //socket.Receive(rcvBytes);
                  //String formattedBuffer = System.Text.Encoding.ASCII.GetString(rcvBytes);
  
                  byte[] buffer = new byte[socket.SendBufferSize];
                  int iBufferLength = socket.Receive(buffer, 0, buffer.Length, 0);
                  Console.WriteLine("Received {0}", iBufferLength);
                  Array.Resize(ref buffer, iBufferLength);
                  string formattedBuffer = Encoding.ASCII.GetString(buffer);
  
                  Console.WriteLine("Data received by Client: {0}", formattedBuffer);
  
                  if (formattedBuffer == "quit")
                  {
                      socket.Close();
                      listeningSocket.Close();
                      Environment.Exit(0);
                  }
  
                  Console.WriteLine("Inside Try i = {0}", i.ToString());
                  Thread.Sleep(500);
              }
              catch (Exception e)
              {
                  //socket.Close();
                  Console.WriteLine("Receiving error: " + e.ToString());
                  Console.ReadKey();
                  //throw;
              }
  
              finally
              {
                  socket.Close();
                  //listeningsocket.close();
              }
          }
      }
  
      static private string getLocalIPAddress()
      {
          IPHostEntry host;
          string localIP = "";
          host = Dns.GetHostEntry(Dns.GetHostName());
          foreach (IPAddress ip in host.AddressList)
          {
              if (ip.AddressFamily == AddressFamily.InterNetwork)
              {
                  localIP = ip.ToString();
                  break;
              }
          }
          return localIP;
      }
  }
  </code></pre>
  
  <p>also here is a link for the code <a href="https://www.dropbox.com/sh/0ttsmz0anwoystr/t5Q83kTeQQ?m" rel="nofollow">enter link description here</a></p>
  
  <p>Can I have some help?</p>