File transfer in java

Transfer a file via SocketTag(s): Networking

About cookies on this site

We use cookies to collect and analyze information on site performance and usage, to provide social media features and to enhance and customize content and advertisements.

Got it


A client module connects to a server then a file is sent to the client.

This example is very simple with no authentication and hard-coded filename!

First the server module.

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; // you may change this public final static String FILE_TO_SEND = "c:/temp/source.pdf"; // you may change this 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(); } } }

The client module

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; // you may change this public final static String SERVER = "127.0.0.1"; // localhost public final static String FILE_TO_RECEIVED = "c:/temp/source-downloaded.pdf"; // you may change this, I give a // different name because i don't want to // overwrite the one used by server... public final static int FILE_SIZE = 6022386; // file size temporary hard coded // should bigger than the file to be downloaded 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(); } } }

To try it, first you start the server. You make sure that the file to be sent (as specified in SimpleFileServer) exists! Then you execute the client module.

To download a file, a simpler and better way is to use the built-in JDK HTTP server, see this HowTo

commentComments ()

Video

Postingan terbaru

LIHAT SEMUA