Título: ayuda con sockets en java
Publicado por: vincentlaw en 10 Diciembre 2010, 20:07 pm
he estado haciendo un servidor y cliente para transferir archivos, para subir archivos del cliente al servidor funciona perfectamente, pero a la inversa, me crea un archivo de 0 bytes y no se transfieren. aqui esta mi codigo. espero que puedan ayudarme cliente: import 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");}
} }
servidor 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"); }
}
}
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
Título: Re: ayuda con sockets en java
Publicado por: cruz_lazcano en 23 Octubre 2012, 15:50 pm
Hola amigo, tengo un problema muy parecido al tuyo, estoy tratando de desarrollar un cliente serveridor con sockets. desde el cliente quiero mandar un a imprimir un archivo, seleccionando la impresora local donde esta el sevidor.
me podrias orientar, como guardar el archivo, ya que puedo enviar el archivo pero no se como hacerlo para que el servidor me reconozca que tipo de archivo es. y de ahi queria imprimir,
HELP ME.
soy nuevo en java. he estado leyendo, llevo ya dos semanas con desvelos y nda.. ya intente con otro lenguaje y me trabo en lo mismo.
|