Muy buenas César, ante todo gracias por las molestias de echarle un vistazo al proyecto.
Sobre el funcionamiento, es correcto todo lo que explicas, yo añadiría que para verificar si el comando introducido cumple los parametros solicitados he utilizado una funcion de la clase String muy interesante, que es matches().
while (!linea.matches("[a-z][a-z][a-z] \".*\"")
En este caso con unos parametros definidos de 3 letras de la a -z, seguido de una " inicial y una final (\") y con cualquier texto en medio de estas (.*) .
Sobre tu pregunta del nombre de las clases, bueno tienes toda la razón, no son nombres apropiados, el motivo es que en el mismo proyecto tengo 3 clases servidor más y tres clientes, de ahí ese nombre.
Para el proyecto final, lo documentaré mucho mejor y pondré nombres más clarificadores. El proyecto final tiene que aceptar multiples clientes (ya lo hago en uno anterior) y además añadir más funciones como modificar archivos etc...
Te adjuto el documento del que saqué los ejercicios y una breve parte teórica (insuficiente para lo que pide hacer luego). Pero si sirve para que otros practiquen el TCP genial. Es de la universidad Carlos III de madrid, una url.
http://www.it.uc3m.es/~celeste/docencia/cr/2003/PracticaSocketsTCP/Cuando termine este ultimo proyecto colgaré todos los anteriores además de este.
Ah, y sobre la busqueda desde C: , sí esta claro que hace que tarde más, si no encuentra rápido el archivo, se podría pasar la carpeta en la que buscarlo, pero el ejercicio pedia expresamente que fuera busqueda en cualquier lugar y de ahí la forma de busqueda.
Cualquier otro comentario, encantado de leerte, me costó bastante entender la cantidad de cosas que hay que abrir, InputStream, Outputstream, BufferedInputStream, File además de array de bytes ... otras clases que aun no he probado son FileInputStream y FileOutputStream, si puedes explicarme brevemente la diferencia con las anteriores, te lo agradecería. Puede ser que permta el envio de archivos mayores o algo mas optimizado? aunque el tamaño va en funcion de los bytes declarados no del Input o Output.
Gracias César.
*Modifico para añadir, que pueden buscarse tantos archivos al a vez como se quiera, es decir get "test.txt", luego get "aprenderaprogramar.txt" etc.. y a partir de la segunda busqueda va muchisimo mas rápido.
Y una pregunta que me lleva un poco de cabeza, he probado a buscar y guardar una JPG, bien el servidor la encuentra y "dice que envia" 800.000 bytes (correcto) pero al recibirlo en el cliente, el InputStream.read() siempre coge un máximo de 65536 bytes.
No se porque, si le marco el length total, creo que tiene que ver con el OutputStream.write() que no llega a mandar el total, podrías añadirme alguna luz sobre este asunto, busco por las redes pero no encuentro respuesta. Gracias.