title: Socket - Java Client, C# Server
body: <p>I am making a program in 2 parts.</p>
  
  <p>Part 1: C# server-socket Application running on PC, listening for commands, and acts accordingly. </p>
  
  <p>Part 2: Java client-socket application running on phone, that sends a command to the pc, when a button is pressed. </p>
  
  <p>Currently, i can send commands from the client to the server, and its all good. 
  But my problem is this: When i send a specific command to the server, i want the server to reply to the client, and the client to read that reply.</p>
  
  <p>Thing just is, when the client tries to read, it time-outs. </p>
  
  <p>Java client program:</p>
  
  <pre><code>class ClientThread implements Runnable 
  {   
      public void run() 
      {
          try 
          {
              Socket socket = new Socket(serverIpAddress, serverPort);
              socket.setSoTimeout(5000);
  
              while (true) 
              {
                  try 
                  {
                      PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);
                      Log.d("Nicklas", "Out it goes");
                      out.println(Command);
  
                      if (Command == "CMD:GetOptions&lt;EOF&gt;")
                      {
                          Log.d("Nicklas", "Getting options");
                          try
                          {
                              Log.d("Nicklas", "Line 1");
                              BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                              Log.d("Nicklas", "Line 2");
                              String answer = in.readLine();
                              Log.d("Nicklas", "answer = " + answer );
                          }
                          catch (Exception ee)
                          {
                              Log.d("Nicklasasasas", ee.toString());
                          }
                      }
                      break;
  
                  } 
  
                  catch (Exception e) 
                  {
                      Log.d("Nicklas", "CAE = " + e.toString());
                      break;
  
                  } 
              }
              socket.close();
          } 
          catch (ConnectException ee)
          {
              Log.d("Nicklas", "Kunne ikke forbinde");
  
          }
          catch (Exception e) 
          {
              Log.d("Nicklasssssss", e.toString());
          }
      }
  }
  </code></pre>
  
  <p>This is called with:</p>
  
  <pre><code>Thread cThread = new Thread(new ClientThread());
          cThread.start();
  </code></pre>
  
  <p>And uses the global variable "Command", which will contain different information, depending on what button was pressed.</p>
  
  <p>The program fails on the line "String answer = in.readline();" with the exception "java.net.SocketTimeoutException".</p>
  
  <p>This is the C# Server part of the program: </p>
  
  <pre><code>private void ListenForClients()
      {
          this.tcpListener.Start();
  
          while (true)
          {
              //blocks until a client has connected to the server
              TcpClient client = this.tcpListener.AcceptTcpClient();
  
              //create a thread to handle communication
              //with connected client
              Thread clientThread = new Thread(new ParameterizedThreadStart(HandleClientComm));
              clientThread.Start(client);
          }
      }
  
      private void HandleClientComm(object client)
      {
          TcpClient tcpClient = (TcpClient)client;
          NetworkStream clientStream = tcpClient.GetStream();
  
          byte[] message = new byte[4096];
          int bytesRead;
  
          while (true)
          {
              bytesRead = 0;
  
              try
              {
                  //blocks until a client sends a message
                  bytesRead = clientStream.Read(message, 0, 4096);
              }
              catch
              {
                  //a socket error has occured
                  break;
              }
  
              if (bytesRead == 0)
              {
                  //the client has disconnected from the server
                  break;
              }
  
              //message has successfully been received
              ASCIIEncoding encoder = new ASCIIEncoding();
              //System.Diagnostics.Debug.WriteLine(encoder.GetString(message, 0, bytesRead));
              string Input = (encoder.GetString(message, 0, bytesRead));
              Input = Input.Trim();
              object[] obj = new object[1];
              obj[0] = Input;
              if (Input == "CMD:GetOptions&lt;EOF&gt;")
              {
                  try
                  {
                      byte[] buffer = encoder.GetBytes("CMD:Accepted");
                      clientStream.Write(buffer, 0, buffer.Length);
                      clientStream.Flush();
                      MessageBox.Show("Client program asked for reply");
                  }
                  catch (Exception e)
                  {
                      MessageBox.Show("Oh it no work!: " + e.ToString());
                  }
              }
              else
              {
                  Udfor(Input);
              }
  
  
          }
  
          tcpClient.Close();
      }
  </code></pre>
  
  <p>Called with the following, in the Form1()</p>
  
  <pre><code>this.tcpListener = new TcpListener(IPAddress.Any, 4532);
  this.listenThread = new Thread(new ThreadStart(ListenForClients));
  this.listenThread.Start();
  </code></pre>
  
  <p>The C# Server seems to work fine, and does show the messagebox "client program asked for reply"</p>
  
  <p>Anyone who can spot the error? </p>