title: send file then message through socket
body: <p>I am trying to send a file from a client to a server. The server receives the file and then send a confirmation message to the client. </p>
  
  <p>My problem is that the client becomes unresponsive when it is waiting the confirmation.</p>
  
  <p>Server :</p>
  
  <pre><code>import java.net.*;
  import java.io.*;
  
  public class Server {
  public static void main(String args[]) throws IOException {
          int port = 1234;
      ServerSocket server_socket;
  
      server_socket = new ServerSocket(port);
      System.out.println("Server waiting for client on port "
              + server_socket.getLocalPort());
      // server infinite loop
      while (true) {
          Socket socket = server_socket.accept();
          System.out.println("New connection accepted "
                  + socket.getInetAddress() + ":" + socket.getPort());
      try {
                  byte[] b = new byte[1024];
                  int len = 0;
                  int bytcount = 1024;
                  String FileName = "C:\\test\\java\\tmp\\sentfile.pdf"; 
                  FileOutputStream inFile = new FileOutputStream(FileName);
                  InputStream is = socket.getInputStream();
                  BufferedInputStream in2 = new BufferedInputStream(is, 1024);
                  while ((len = in2.read(b, 0, 1024)) != -1) {
                      bytcount = bytcount + 1024;
                  inFile.write(b, 0, len);
                  }
                  System.out.println("Bytes Writen : " + bytcount);
  
                  //Sending the response back to the client.
                  ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
                  oos.flush();
                  oos.writeObject("ok");
                  System.out.println("Message sent to the client is "+"ok");
  
                  in2.close();
                  inFile.close();
              } catch (IOException e) {
          System.out.println("Unable to open file" + e);
          return;
      }
      socket.close();
      System.out.println("Connection closed by client");
          }
  }
  }
  </code></pre>
  
  <p>Client :</p>
  
  <pre><code>import java.net.*;
  import java.io.*;
  
  public class Client {
      public static void main(String[] args) throws UnknownHostException,
          IOException, ClassNotFoundException {
  
          int port = 1234;
      Socket socket = null;
  
      // connect to server
      socket = new Socket("127.0.0.1", port);
  
      try {
              byte[] buf = new byte[1024];
              OutputStream os = socket.getOutputStream();
              BufferedOutputStream out = new BufferedOutputStream(os, 1024);
              String file = "C:\\test\\java\\client\\source.pdf"; 
              FileInputStream in = new FileInputStream(file);
              int i = 0;
              int bytecount = 1024;
              while ((i = in.read(buf, 0, 1024)) != -1) {
                  bytecount = bytecount + 1024;
              out.write(buf, 0, i);
              out.flush();
              }
              System.out.println("Bytes Sent :" + bytecount);
  
              ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
              String confirmation = (String) ois.readObject();
              System.out.println("from server : " + confirmation);
  
              out.close();
              in.close();
      } catch (IOException e) {
      System.out.println(e);
      }
      socket.close();
  }
  }
  </code></pre>