Ejemplo sencillo de como enviar archivos via sockets en Java
Consola
======================================================
Starting server…
>Server started on port: 8081
>Waiting for connections…
>>New Connection Received: /127.0.0.1
>>Starting thread for connection…
>>Receiving file: bt4-r2.iso.part
>>Please wait…
>>Task completed!
======================================================
import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.InetAddress; import java.net.ServerSocket; import java.net.Socket; import java.net.UnknownHostException; /** * @author Leyer */ class _Server extends ServerSocket implements Runnable{ private boolean running = false; public _Server(int port, int backlog, InetAddress bindAddr) throws IOException { super(port, backlog, bindAddr); running=true; System.out.println(">Server started on port: "+port); } public void init(){ new Thread(this).start(); } private class Connection extends Thread{ public static final int DEFAULT_BUFFER_SIZE = 1024; private DataInputStream dataInputStream; private Socket socket; public Connection(Socket socket){ try { this.socket=socket; dataInputStream=new DataInputStream(socket.getInputStream()); } catch (IOException e) { e.printStackTrace(); } } @Override public void run(){ try{ String fileName = dataInputStream.readUTF(); System.out.println(">>Receiving file: "+fileName); System.out.println(">>Please wait..."); FileOutputStream fileOutputStream=new FileOutputStream(fileName); byte b[]=new byte[DEFAULT_BUFFER_SIZE]; int len=0,off=0; while((dataInputStream.read(b))>0)fileOutputStream.write(b, off, len); fileOutputStream.flush(); fileOutputStream.close(); System.out.println(">>Task completed!"); } catch (IOException e) { e.printStackTrace(); }finally{ try { socket.close(); } catch (IOException e) { e.printStackTrace(); } } } } public boolean isRunning(){ return running; } @Override public void run() { System.out.println(">Waiting for connections..."); Socket socket=null; while(running){ try { socket=accept(); System.out.println(">>New Connection Received: "+socket.getInetAddress()); System.out.println(">>Starting thread for connection..."); Connection connection=new Connection(socket); connection.start(); } catch (IOException e) { e.printStackTrace(); } } } } class _Socket extends Socket implements Runnable{ public static final int DEFAULT_BUFFER_SIZE = 1024; private DataOutputStream dataOutputStream; private FileInputStream fileInputStream; public _Socket(InetAddress address,int port) throws IOException{ super(address,port); initStreams(getInputStream(), getOutputStream()); } public void initStreams(InputStream inputStream,OutputStream outputStream){ dataOutputStream=new DataOutputStream(outputStream); } public void upFile(File file){ if(file.exists()&&file.length()>0){ try { fileInputStream=new FileInputStream(file); dataOutputStream.writeUTF(file.getName()); dataOutputStream.flush(); new Thread(this).start(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } } @Override public void run() { byte b[]=new byte[DEFAULT_BUFFER_SIZE]; int len=0,off=0; try { while((len=fileInputStream.read(b))>0) dataOutputStream.write(b, off, len); dataOutputStream.flush(); } catch (IOException e1) { e1.printStackTrace(); }finally{ try { close(); } catch (IOException e) { e.printStackTrace(); } } } } public class Transfers{ public static void main(String[] argv) { try { System.out.println("Starting server..."); _Server _Server=new _Server(8081, 500, InetAddress.getByName("127.0.0.1")); _Server.init(); try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } if(_Server.isRunning()) new _Socket(InetAddress.getByName("127.0.0.1"), 8081).upFile(new File("C:\\bt4-r2.iso.part")); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }