Cliente-servidor

Iniciado por alzehimer_cerebral, 4 Enero 2010, 23:22 PM

0 Miembros y 1 Visitante están viendo este tema.

-Ramc-

Me parece que alguien debe leerse un buen tutorial de Sockets, en el paquete .net está todo lo que necesitas, toma el InputStream del socket, empieza a leer los datos que te envia el server y ya lo tienes.

Shhh... be vewy, vewy, quiet!  I'm hunting wabbits...
LA PANDILLA MAS GRANDE DE MI CIUDAD, SE LLAMA POLICIA NACIONAL.

Leyer

Cita de: -Ramc- en  6 Enero 2010, 19:15 PM
Me parece que alguien debe leerse un buen tutorial de Sockets, en el paquete .net está todo lo que necesitas, toma el InputStream del socket, empieza a leer los datos que te envia el server y ya lo tienes.
:P pero si el lo esta haciendo asi ps que lo siga haciendo no es mucha la diferencia

-Ramc-

Cita de: LEYER en  6 Enero 2010, 19:19 PM
Cita de: -Ramc- en  6 Enero 2010, 19:15 PM
Me parece que alguien debe leerse un buen tutorial de Sockets, en el paquete .net está todo lo que necesitas, toma el InputStream del socket, empieza a leer los datos que te envia el server y ya lo tienes.
:P pero si el lo esta haciendo asi ps que lo siga haciendo no es mucha la diferencia
Ahh, lo está haciendo todo con esa api? pensé que usaba la .net por el primer comentario y ahora iba a usar esta y terminaría un revuelto de código, pero, si está con una sóla api, que siga. xD

Shhh... be vewy, vewy, quiet!  I'm hunting wabbits...
LA PANDILLA MAS GRANDE DE MI CIUDAD, SE LLAMA POLICIA NACIONAL.

alzehimer_cerebral

Simplemente estoy buscando formas de hacerlo y la verdad que la segunda me parece mas comoda de momento.  Con lo que he visto parece ser que con net API habria que tambien programar un proceso que corra en el servidor Apache y que se sincronizase con el proceso cliente, mientras que con los metodos http esto no hace falta. 

LEYER ya me he bajado la libreria donde la descomprimo para poder utilizarla?

Salu2

alzehimer_cerebral
Servicios Informaticos Valencia - www.ag-solutions.es
Mi blog - www.alvarogarciasolano.com

-Ramc-

Debe tener uno o más .jar o class, tienes dos opciones, metes la ruta donde lo tienes en el classpath o compilas directamente indicandole el classpath.

javac -classpath "$CLASSPATH:.:/usr/lib/jdk1.6.0_10/jre/lib/ext/libreria.jar" Prueba.java

Shhh... be vewy, vewy, quiet!  I'm hunting wabbits...
LA PANDILLA MAS GRANDE DE MI CIUDAD, SE LLAMA POLICIA NACIONAL.

Leyer

#15
 ;) bien!

esta es la segunda forma

Código (java) [Seleccionar]

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;

/**
* @author Leyer
*/
public class ThreadForDownload extends Thread{
public static void main(String []args){
try {
new ThreadForDownload(new URL("http://www.tecnun.es/asignaturas/Informat1/ayudainf/aprendainf/Java/Java2.pdf"),"/home/leyer").start();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private URL           url          =   null;
private URLConnection connection   =   null;
private int offset = 0;
private boolean init   = true;
String path;
private FileOutputStream fileOutputStream;
public ThreadForDownload(
final URL URL,
String path) {
this.url = URL;this.path = path;
}

@Override
public synchronized void run() {
while(init){
try {
System.out.println("-----------------------------------");
System.out.println("Host: "+url.getHost());
System.out.println("NOmbre del Archivo: "+getFileName(url));
System.out.println("Tamaño: "+getLength(url));
System.out.println("-----------------------------------");
connection = url.openConnection();
} catch (IOException e) {System.err.println("Error in conection!");System.exit(0);
} catch (Exception e) {
e.printStackTrace();System.exit(0);
}
int read = 0;
final int SIZE = getLength(url);
InputStream stream  =  null;
try {
System.out.println("wait...");
   stream = connection.getInputStream();
fileOutputStream = new FileOutputStream(path+""+File.separator+getFileName(url));
final byte[] data = new byte[SIZE];
while((read = stream.read(data)) > 0){
offset +=read;
fileOutputStream.write(data,
0,
read);
  }
try{
System.out.println("Completado!");
fileOutputStream.flush();
fileOutputStream.close();
offset = 0;  init = false;
break;
   }catch (Exception e) { }
}catch (Exception e1) {
 }
  }
}

public void setInit(boolean init) {
this.init =false;
}
final int getLength(URL urlFile){
URLConnection connection = null;
int size = 0;
try {
connection = urlFile.openConnection();
size = connection.getContentLength();
} catch (IOException e) {
System.err.println(e+":ERROR");System.exit(0);
} catch (Exception e) {
System.err.println(e+":ERROR");System.exit(0);
}
return size;
}
private final String getFileName(URL URL){
    String path=URL.getPath();
    int lastIndexOf=path.lastIndexOf("/");
    String name = path.substring(lastIndexOf+1);
return name;

}
}


PD: lo hice al instante asi que errores en el codigo se aceptan

Debci

Ese codigo lo buscaba xD, mira un cosa que quiero hacer (Servira de ayuda para el post):

Quiero hacer una relacion del progreso, ver cuantos bytes quedan por descargar, y he querido hacerlo asi:

Código (java) [Seleccionar]

int contador = getLength(url);
while((read = stream.read(data)) > 0){
                                contador--;
                                System.out.println(contador);
offset +=read;
                                contador--;
                               
fileOutputStream.write(data,0,read);
   }

Pero no me da la salida que deberia, no se porque motivo,en teoria es asi disminuyo en 1 cada loop que pasa, o cuanto escribe por loop, creo que es eso el problema.

Saludos

Debci

Rectifico, ya lo he consegui, aqui el metodo:

Código (java) [Seleccionar]

int porcentaje = 0;
                        System.out.println(porcentaje);
while((read = stream.read(data)) > 0){
                               
                               
offset += read;
                                porcentaje = (offset * 100)/SIZE;
                                System.out.println(porcentaje);
                               
fileOutputStream.write(data,0,read);
   }


Saludos

alzehimer_cerebral

LEYER gracias por tu aporte uan vez mas, el ejemplo que me pones me gusta mas ya que lleva threads incorporados.  El codigo esta muy claro tambien.

Cualquier cosa os comento.

Salu2.

alzehimer_cerebral
Servicios Informaticos Valencia - www.ag-solutions.es
Mi blog - www.alvarogarciasolano.com

Leyer

Cita de: ..::| D3Bć1 |::. en  7 Enero 2010, 13:28 PM
Rectifico, ya lo he consegui, aqui el metodo:

Código (java) [Seleccionar]

int porcentaje = 0;
                       System.out.println(porcentaje);
while((read = stream.read(data)) > 0){
                               
                               
offset += read;
                               porcentaje = (offset * 100)/SIZE;
                               System.out.println(porcentaje);
                               
fileOutputStream.write(data,0,read);
  }


cierto esta listo para un progressBar aunke fuera bueno que en la salida se imprimiera en una sola linea y no salte a la siguiente desconozco eso.

Cita de: alzehimer_cerebral en  7 Enero 2010, 13:31 PM
LEYER gracias por tu aporte uan vez mas, el ejemplo que me pones me gusta mas ya que lleva threads incorporados.  El codigo esta muy claro tambien.
Cualquier cosa os comento.
Salu2.
alzehimer_cerebral
:)