FTP CON JAVA

Sporting
28 de Julio del 2005
Hola, me gustaria saber como podria hacer el siguiente programilla:

Se trata de implementar un servidor FTP con el que poder subir, bajar y borrar tanto
ficheros binarios como de texto. Todas las operaciones quedarán registradas en otro
servidor distinto.
Para la realización de la práctica se tendrán que implementar 3 clases:
- ClienteFTP
- ServidorFTP
- ServidorLOG
Será necesario el diseño de un protocolo de mensajes (palabras reservadas enviadas
entre el cliente y el servidor para mantener un flujo correcto de intercambio de datos)
entre el ClienteFTP y el ServidorFTP que será explicado en la memoria de la práctica.
Todas las operaciones realizadas tendrán que tener constancia en un fichero Log.txt.
Cada vez que el cliente y el servidor realicen alguna operación tendrán que enviar un
mensaje UDP al ServidorLOG con los detalles de la operación realizada.
La transferencia binaria de archivos se podrá realizar byte a byte o por bloques (hay que
elegir una, no hace falta implementar las dos transferencias, como sea más sencillo).
El ServidorFTP estará esperando conexiones en el puerto 9999 y una vez haya
terminado con un cliente continuará esperando más conexiones, es decir, no finaliza
nunca.
El ServidorLOG estará esperando mensajes de Log en el puerto 8888.
Todas las clases se ejecutarán en localhost.
1.1– Cliente FTP
El cliente mostrará en pantalla un menú como el siguiente:
1.- LISTAR FICHEROS
2.- SUBIR FICHERO BINARIO
3.- SUBIR FICHERO TEXTO
4.- BAJAR FICHERO BINARIO
5.- BAJAR FICHERO TEXTO
6.- BORRAR FICHERO
0.- SALIR
Cuando se pida subir o bajar un fichero binario o de texto a continuación se pedirá el
nombre del fichero y luego se llevará a cabo la operación. Lo mismo para el caso de
borrar un fichero.
Al pedir la lista de ficheros, el servidor mostrará los ficheros que se hayan subido con
antelación y aún se mantengan en el mismo (que no hayan sido borrados).
Al realizar cualquier operación se tendrá que mandar un mensaje UDP al Servidor de
Log.
1.2 Servidor FTP
El Servidor FTP estará esperando conexiones en el puerto 9999. Una vez que un cliente
se conecte, esperará los comandos pidiendo operaciones y las servirá.
Cada vez que realice alguna operación enviará un mensaje de Log al Servidor de Log.
El Servidor FTP nunca finaliza. Una vez que un usuario se desconecta continuará
esperando conexiones de otros clientes.
1.3 Servidor LOG
El Servidor LOG estará esperando mensajes UDP en el puerto 8888. Cada vez que
reciba un mensaje dejará constancia en el fichero Log.txt.
Los mensajes de Log contendrán información sobre: El ordenador que envía el mensaje,
el puerto desde el que lo envía, la operación realizada y la fecha.

Carlos
28 de Julio del 2005
Me suena este ejercicio... lo hice el año pasado... ¿dónde te has encallado?

sporting
28 de Julio del 2005
Pues la verdad q logre hacer la gran parte, todavia no probe los mensajes con udp, pero quede trabado en bajar archivos ya que solo me baja una vez despues me da una IOException, este es mi codigo para ese metodo:

Cliente (que hara aora de servidor):
public void bajarBinario(BufferedReader bf,PrintWriter sal){
String nombre=\"\";
try {
ServerSocket sSrv = new ServerSocket(7777);
Socket sCli = sSrv.accept();
nombre=bf.readLine();
sal.println(nombre);

DataInputStream ent1 = new DataInputStream(sCli.getInputStream());
File fichero=new File(\"C:\\\\Documents and Settings\\\\Archivos Cliente\\\\\"+nombre);
FileOutputStream sal1 = new FileOutputStream(fichero);

long tamaño = ent1.readLong();

for(long i=0; i<tamaño;i++){
sal1.write(ent1.read());
sal1.flush();
}

sCli.close();
}
catch (IOException e){}
}

Servidor(aora hara de cliente):
public void bajarBinario(PrintWriter sal,BufferedReader ent){
try {
Socket sCli = new Socket(\"localhost\",7777);
String nombre=\"\";
nombre=ent.readLine();
File fichero = new File(\"C:\\\\Archivos\\\\\"+nombre);
FileInputStream ent1=new FileInputStream(fichero);
DataOutputStream sal1=new DataOutputStream(sCli.getOutputStream());

long tamaño = fichero.length();
sal1.writeLong(tamaño);

for(long i=0; i<tamaño;i++){
sal1.writeByte(ent1.read());
sal1.flush();
}
sCli.close();
}
catch (UnknownHostException e){}
catch(FileNotFoundException e){}
catch (IOException e){}
}

pi2213
28 de Julio del 2005
Hola,
arreglaste tu problema???
Yo también tengo un ejercicio parecido y tengo las mismas dudas

Redes
28 de Julio del 2005
Esos EUITIOSSSS,vaya cara, a ver si nos hacen la práctica de redes por la cara, eh??, na, haceis bien, yo tb estaba mirando por aki un poco de ayudita pa hacer la transferencia binaria de archivos, pero no me ayudo mucho, asi q buscare por otros sitios. Q tengais suerte con la practica, aunq a mi me preocupa mas la teoría, ahi si q voy mal :-(

vayaMorro
28 de Julio del 2005
jajaja vaya morro le echamos eh? Una cosa ye buscar información en internet, y otra pedir que te hagan la práctica entera!! no sabes que igual que tú, esto lo pueden leer los profesores?