aqui esta mi codigo. espero que puedan ayudarme
cliente:
Código:
servidorimport java.io.BufferedOutputStream; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; import java.util.Scanner; import java.util.logging.Level; import java.util.logging.Logger; /** * * @author vLAW */ public class client2 { Socket client= new Socket(); Socket client2= new Socket(); DataOutputStream out= null; DataInputStream in=null ; FileInputStream origen=null; FileOutputStream pt=null ; String[] lista = new String[100]; //////////////////////////////////////////////// public String[] direcciones(String direccion) { if(direccion.equals("1")){//------------------------------------si es uno se hace la actualizacion de la carpeta try{ client= new Socket("localhost",6800); out= new DataOutputStream(client.getOutputStream()); in= new DataInputStream(client.getInputStream()); out.writeUTF("1"); boolean x=true;//este while, ca`tura los datos que provienen del servidor int xx=0; while(x){ lista[xx]=in.readUTF(); if(in.readUTF().equals("fin")) x=false; xx++; } } catch(Exception e){System.out.println("no se pudo enviar el mensage de peticion");} } //------------------------------------------------------------------------------ //---------------------------------------------------si no se hace un envio a el servidor //------------------------------------------------------------------------------ return lista; } public void subir(String direccion, String nombre){ try{ client= new Socket("localhost",6800); pt = (FileOutputStream)client.getOutputStream() ;//para transferencia de archivos origen = new FileInputStream(direccion);//para transferencia de archivos (lo que se va a enviar al server) out= new DataOutputStream(client.getOutputStream()); out.writeUTF(nombre); //System.out.println(in.readUTF()); client.sendUrgentData(100); byte[] buf = new byte[1024]; int len; while ((len = origen.read(buf)) > 0 ){ pt.write(buf, 0, len); } pt.close(); origen.close(); client.close(); }catch(Exception e){ System.out.println("no se pudo copiar el archivo"); } } public void descargar(String descarga, String opcion){ try { client= new Socket("localhost",6800); out= new DataOutputStream(client.getOutputStream()); out.writeUTF(opcion); out.writeUTF(descarga); } catch (IOException ex) { System.out.println("no se pudo enviar el mensage"); } try{ //ABRIMOS UN BUFER PARA DESCARGAR LO QUE EL CLIENTE NOS ESTÁ ENVIANDO //CREAMOS LA INSTANCIA PARA ESCRIBIR EL ARCHIVO EN DISCO FileOutputStream destino = new java.io.FileOutputStream("C:/descargas2/nuevo"); byte[] buf = new byte[1024]; int len; out.writeUTF("envia algo!!!!!!!!!!!!!!!!11"); while ((len = in.read(buf)) != -1) { System.out.println("carajo"); destino.write(buf, 0, len); } in.close(); destino.close(); } catch(Exception b){System.out.println("no se pudo copiar el archivo");} } }
Código:
si da algunos errores, es por que son algunos datos que se obtenian de una interface que hice del net beans, pero solo son numeros, "1","2", y el nombre del archivo import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.net.ServerSocket; import java.net.Socket; public class Servidor {//implements Runnable ServerSocket server; DataOutputStream out; DataInputStream mensage; String eleccion; Socket client= new Socket(); String directorio; FileOutputStream pt=null ; FileInputStream origen=null; public Servidor() { try { //CREAMOS EL SOCKET DEL SERVIDOR server=new ServerSocket(6800); System.out.println("Servidor corriendo..."); } catch(Exception e) { System.out.println("Error al conectarse al puerto\n"+e); System.exit(1); } } public void run() { while (true) { try { //ESPERA A QUE LLEGUE UN CLIENTE client=server.accept(); out= new DataOutputStream(client.getOutputStream());///////////////////////// mensage= new DataInputStream(client.getInputStream());/////////////////////////// } catch(java.io.IOException e) { System.out.println("No se pudo establecer conexión " + e.getMessage()); } try {//////////////////////////////////////// eleccion=mensage.readUTF(); System.out.println(eleccion); } catch(Exception e) { System.out.println("mierda1"); } //------------------------------------si es uno se hace la actualizacion de la carpeta if(eleccion.equals("1")|| eleccion.equals("2")) { if(eleccion.equals("1")){ informacion(); } else{ descarga(); } }//---------------------------------------------------------------- else//----------------------------------------------si no, es una carga de arhivo { carga(); } //-------------------------------------------------------------- } } public static void main(String a[]) { Servidor servidor = new Servidor(); // Ponemos a correr nuestro hilo servidor //new Thread(servidor).start(); servidor.run(); } public void descarga(){ String copiadirectorio; copiadirectorio=directorio; try{ String archivo4=mensage.readUTF(); directorio= directorio.concat("\\"+archivo4); System.out.println(directorio); } catch(Exception e){ System.out.println("no se pudo enviar el mensag de descarga"); } descargareal(directorio); directorio=copiadirectorio; } //---------------------------------------------------------------en proceso public void descargareal(String archivo ){ try{ client= new Socket("localhost",6800); pt = (FileOutputStream)client.getOutputStream() ;//para transferencia de archivos origen = new FileInputStream(archivo); out= new DataOutputStream(client.getOutputStream()); client.sendUrgentData(100); byte[] buf = new byte[1024]; int len; System.out.println(mensage.readUTF()); while ((len = origen.read(buf)) > 0 ){ pt.write(buf, 0, len); System.out.println(buf); } pt.close(); origen.close(); client.close(); }catch(Exception e){ System.out.println("no se pudo copiar el archivo"); } } //--------------------------------------------------------------- public void carga(){ try{ //ABRIMOS UN BUFER PARA DESCARGAR LO QUE EL CLIENTE NOS ESTÁ ENVIANDO InputStream in = client.getInputStream(); //CREAMOS LA INSTANCIA PARA ESCRIBIR EL ARCHIVO EN DISCO FileOutputStream destino = new java.io.FileOutputStream("C:/descargas/"+eleccion); byte[] buf = new byte[1024]; int len; while ((len = in.read(buf)) > 0) { destino.write(buf, 0, len); } in.close(); destino.close(); } catch(Exception b){System.out.println("no se pudo copiar el archivo");} } public void informacion(){ try { ///--------------------------------se hicieron 2 for, por que si no el cliente solo recuperava el nombre del archivo yuno no, uno si y uno no y asi... File archivo= new File("C:/descargas/"); directorio= archivo.toString(); String []archivos = archivo.list(); for(int x=0;x<archivo.list().length;x++){ System.out.println(archivos[x]); out.writeUTF(archivos[x]); } for(int x=1;x<archivo.list().length;x++){ System.out.println(archivos[x]); out.writeUTF(archivos[x]); } out.writeUTF("fin"); } catch(Exception e) { System.out.println("mierda2"); } } }