Search code examples
javacompressionzipunzip

How I can edit this code, so that server zips the file before sending to the client and Client unzips this after receiving


I want that the server should zip the file before sending to the client and the client unzips the file after getting from server. I don't know how I can achieve this. Anyone can help me in this please?

Server side code

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class SimpleFileServer {

  public final static int SOCKET_PORT = 13267; 
  public final static String FILE_TO_SEND = "c:/temp/xyz.txt";  

  public static void main (String [] args ) throws IOException {
    FileInputStream fis = null;
    BufferedInputStream bis = null;
    OutputStream os = null;
    ServerSocket servsock = null;
    Socket sock = null;
    try {
      servsock = new ServerSocket(SOCKET_PORT);
      while (true) {
        System.out.println("Waiting...");
        try {
          sock = servsock.accept();
          System.out.println("Accepted connection : " + sock);
          // send file
          File myFile = new File (FILE_TO_SEND);
          byte [] mybytearray  = new byte [(int)myFile.length()];
          fis = new FileInputStream(myFile);
          bis = new BufferedInputStream(fis);
          bis.read(mybytearray,0,mybytearray.length);
          os = sock.getOutputStream();
          System.out.println("Sending " + FILE_TO_SEND + "(" + mybytearray.length + " bytes)");
          os.write(mybytearray,0,mybytearray.length);
          os.flush();
          System.out.println("Done.");
        }
        finally {
          if (bis != null) bis.close();
          if (os != null) os.close();
          if (sock!=null) sock.close();
        }
      }
    }
    finally {
      if (servsock != null) servsock.close();
    }
  }
}

Client side code:

import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.Socket;

public class SimpleFileClient {

          public final static int SOCKET_PORT = 13267;     
          public final static String SERVER = "127.0.0.1";  
          public final static String FILE_TO_RECEIVED = "c:/temp/xyz.txt";  

public final static int FILE_SIZE = 6022386;  

  public static void main (String [] args ) throws IOException {
    int bytesRead;
    int current = 0;
    FileOutputStream fos = null;
    BufferedOutputStream bos = null;
    Socket sock = null;
    try {
      sock = new Socket(SERVER, SOCKET_PORT);
      System.out.println("Connecting...");

      // receive file
      byte [] mybytearray  = new byte [FILE_SIZE];
      InputStream is = sock.getInputStream();
      fos = new FileOutputStream(FILE_TO_RECEIVED);
      bos = new BufferedOutputStream(fos);
      bytesRead = is.read(mybytearray,0,mybytearray.length);
      current = bytesRead;

      do {
         bytesRead =
            is.read(mybytearray, current, (mybytearray.length-current));
         if(bytesRead >= 0) current += bytesRead;
      } while(bytesRead > -1);

      bos.write(mybytearray, 0 , current);
      bos.flush();
      System.out.println("File " + FILE_TO_RECEIVED
          + " downloaded (" + current + " bytes read)");
    }
    finally {
      if (fos != null) fos.close();
      if (bos != null) bos.close();
      if (sock != null) sock.close();
    }
  }

}

Solution

  • Answering for my own question

    package server;  
    import java.io.BufferedInputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.OutputStream;
    import java.net.ServerSocket;
    import java.net.Socket;
      import java.io.FileOutputStream;
    import java.util.zip.ZipEntry;
    import java.util.zip.ZipOutputStream;
    
    
    public class SimpleFileServer {
    
      public final static int SOCKET_PORT = 1328;
      public final static String FILE_NAME = "from.txt";  
      public final static String FILE_TO_SEND = "c:/temp/from.txt";
      public final static String ZIP_FILE_TO_SEND = "c:/temp/myFile.zip";
    
      public static void main (String [] args ) throws IOException {
        FileInputStream fis = null;
        BufferedInputStream bis = null;
        OutputStream os = null;
        ServerSocket servsock = null;
        Socket sock = null;
    
    
        zipIt();
    
        try {
          servsock = new ServerSocket(SOCKET_PORT);
          while (true) {
            System.out.println("Waiting...");
            try {
              sock = servsock.accept();
              System.out.println("Accepted connection : " + sock);
              // send file
              File myFile = new File (ZIP_FILE_TO_SEND);
              byte [] mybytearray  = new byte [(int)myFile.length()];
              fis = new FileInputStream(myFile);
              bis = new BufferedInputStream(fis);
              bis.read(mybytearray,0,mybytearray.length);
              os = sock.getOutputStream();
              System.out.println("Sending " + ZIP_FILE_TO_SEND + "(" + mybytearray.length + " bytes)");
              os.write(mybytearray,0,mybytearray.length);
              os.flush();
              System.out.println("Done.");
            }
            finally {
              if (bis != null) bis.close();
              if (os != null) os.close();
              if (sock!=null) sock.close();          
            }
          }
        }
        finally {
          if (servsock != null) servsock.close();
        }
      }
    
      public static void zipIt()
        {
            byte[] buffer = new byte[1024];
    
            try{
    
                FileOutputStream fos = new FileOutputStream(ZIP_FILE_TO_SEND);
                ZipOutputStream zos = new ZipOutputStream(fos);
                ZipEntry ze= new ZipEntry(FILE_NAME);
                zos.putNextEntry(ze);
                FileInputStream in = new FileInputStream(FILE_TO_SEND);
    
                int len;
                while ((len = in.read(buffer)) > 0) {
                    zos.write(buffer, 0, len);
                }
    
                in.close();
                zos.closeEntry(); 
                zos.close();
    
                System.out.println("Zip Done");
    
            }catch(IOException ex){
               ex.printStackTrace();
            }
        }
    }
    

    Client Side:

    package server;  
    import java.io.BufferedOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.net.Socket;
    import java.util.zip.ZipEntry;
    import java.util.zip.ZipInputStream;
    
    public class SimpleFileClient {
    
      public final static int SOCKET_PORT = 1328;      
      public final static String SERVER = "127.0.0.1";  
      public final static String
           FILE_NAME = "xyz.txt";  
      public final static String
           ZIP_FILE_NAME = "xyz.zip";  
      public final static String
           FILE_PATH = "c:/temp/";  
    
      public final static int FILE_SIZE = 6022386; 
    
      public static void main (String [] args ) throws IOException {
        int bytesRead;
        int current = 0;
        FileOutputStream fos = null;
        BufferedOutputStream bos = null;
        Socket sock = null;
        try {
          sock = new Socket(SERVER, SOCKET_PORT);
          System.out.println("Connecting...");
    
          // receive file
          byte [] mybytearray  = new byte [FILE_SIZE];
          InputStream is = sock.getInputStream();
          fos = new FileOutputStream(FILE_PATH+ZIP_FILE_NAME);
          bos = new BufferedOutputStream(fos);
          bytesRead = is.read(mybytearray,0,mybytearray.length);
          current = bytesRead;
    
          do {
             bytesRead =
                is.read(mybytearray, current, (mybytearray.length-current));
             if(bytesRead >= 0) current += bytesRead;
          } while(bytesRead > -1);
    
          bos.write(mybytearray, 0 , current);
          bos.flush();
          System.out.println("File " + FILE_PATH+ZIP_FILE_NAME
              + " downloaded (" + current + " bytes read)");
        }
        finally {
          if (fos != null) fos.close();
          if (bos != null) bos.close();
          if (sock != null) sock.close();
        }
    
        unZipIt();
    
      }
    
    
    
      public static void unZipIt(){
    
         byte[] buffer = new byte[1024];
    
         try{
    
            //get the zip file content
            ZipInputStream zis = 
            new ZipInputStream(new FileInputStream(FILE_PATH+ZIP_FILE_NAME));
            //get the zipped file list entry
            ZipEntry ze = zis.getNextEntry();
    
            while(ze!=null){
    
               String fileName = ze.getName();
               File newFile = new File(FILE_PATH+FILE_NAME);
    
               System.out.println("file unzip : "+ newFile.getAbsoluteFile()); 
               FileOutputStream fos = new FileOutputStream(newFile);             
    
                int len;
                while ((len = zis.read(buffer)) > 0) {
                fos.write(buffer, 0, len);
                }
    
                fos.close();   
                ze = zis.getNextEntry();
            }
    
            zis.closeEntry();
            zis.close();
            System.out.println("Done");
    
        }catch(IOException ex){
           ex.printStackTrace(); 
        }
       }    
    
    
    
    }