Autor
|
Tema: Detener la ejecución de este código. (Leído 7,876 veces)
|
23time
Desconectado
Mensajes: 28
|
Buenas. A ver si alguien me puede ayudar con este código. Nos han dado en clase un par de códigos escritos en JAVA de un cliente/servidor utilizando sockets para pasar archivos a través de internet. El caso es que, tras integrar el código en mi trabajito, tengo un problema con la creación del thread del server que me deja sin poder controlar el nuevo hilo. Lo que necesito es que el servidor se detenga una vez que ha recibido un fichero y no que se quede a la espera de nuevos clientes, sino que al recibir uno, termine la ejecución. Os dejo el código. byte[] receivedData; int in; try{ g.setjTextField1("Servidor arrancado"); while ( true ) { connection = server.accept(); receivedData = new byte[1024]; //recibimos el nombre del fichero file = dis.readUTF(); file = file.substring(file.indexOf('/')+1,file.length()); file = file.concat("_host"); while ((in = bis.read(receivedData)) != -1){ bos.write(receivedData,0,in); } bos.close(); dis.close(); } }
No se si es porque estoy cansado o porque ya estoy tan quemado que no consigo verlo xD, pero si alguien me puede echar una mano se lo agradecería mucho Un saludo!!!
|
|
|
En línea
|
|
|
|
Leyer
Desconectado
Mensajes: 786
leyer@elhacker.net
|
al recibir uno solo ? usa un break
y ya Podrias crear un nuevo hilo que descargue el fichero y cuando aceptas la conexion usas break; ; anteriormente tuviste que aver llamado el hilo de descarga. aunke es lo mismo un saludo.
|
|
« Última modificación: 10 Julio 2010, 01:10 am por LEYER »
|
En línea
|
|
|
|
joseprox
Desconectado
Mensajes: 37
|
while ( true ) { connection = server.accept(); receivedData = new byte[1024]; //recibimos el nombre del fichero file = dis.readUTF(); file = file.substring(file.indexOf('/')+1,file.length()); file = file.concat("_host"); while ((in = bis.read(receivedData)) != -1){ bos.write(receivedData,0,in); } bos.close(); dis.close(); break; }
Prueba con esto y me dices..... sino enviame el codigo completo el server y el cliente... estoy atento.......
|
|
« Última modificación: 13 Julio 2010, 01:56 am por LEYER »
|
En línea
|
Toda persona tiene derecho a cometer errores... la verdad es q solo ella es RESPONSABLE DE LO QUE HACE.....!!!!!
|
|
|
Debci
Wiki
Desconectado
Mensajes: 2.021
Actualizate o muere!
|
O cambia la condicion del while, porque de esa manera siempre se ejecuta.
Saludos
|
|
|
En línea
|
|
|
|
23time
Desconectado
Mensajes: 28
|
Buenas chavales. Perdón por no haber contestado antes al post, pero empecé las vacaciones al poco de publicar el post y hasta ahora no he parado xD La verdad es que no conseguí detener la ejecución del código, aunque utilicé el break tras cerrar los buffers y, como eso no funcionaba, le cambié la condición de ejecución cambiando el boolean al transmitir el archivo. Por eso acudí aquí a ver si alguien me podía ayudar. Sinceramente, creo que es un problema del propio JAVA, ya que he estado usando swing y creo que es ahí donde falla. De todas formas, como es un servidor se supone que debe estar "al loro" siempre, por lo que decidí separarlo de mi aplicación (ya que me la bloqueaba). En teoría se detendría al mandar el mensaje propicio desde el cliente, el cual cambia la condición del while con un break. Como se suele decir, si mahoma no va a la montaña, la montaña va a mahoma xD, la cuestión era encontrar una solución al problema. Gracias a todos aquellos que han intentado ayudarme Saludos!!.
|
|
|
En línea
|
|
|
|
Debci
Wiki
Desconectado
Mensajes: 2.021
Actualizate o muere!
|
Buenas chavales. Perdón por no haber contestado antes al post, pero empecé las vacaciones al poco de publicar el post y hasta ahora no he parado xD La verdad es que no conseguí detener la ejecución del código, aunque utilicé el break tras cerrar los buffers y, como eso no funcionaba, le cambié la condición de ejecución cambiando el boolean al transmitir el archivo. Por eso acudí aquí a ver si alguien me podía ayudar. Sinceramente, creo que es un problema del propio JAVA, ya que he estado usando swing y creo que es ahí donde falla. De todas formas, como es un servidor se supone que debe estar "al loro" siempre, por lo que decidí separarlo de mi aplicación (ya que me la bloqueaba). En teoría se detendría al mandar el mensaje propicio desde el cliente, el cual cambia la condición del while con un break. Como se suele decir, si mahoma no va a la montaña, la montaña va a mahoma xD, la cuestión era encontrar una solución al problema. Gracias a todos aquellos que han intentado ayudarme Saludos!!. La solucion a tu problema tiene un nombre: THREADS!!! Saludos
|
|
|
En línea
|
|
|
|
23time
Desconectado
Mensajes: 28
|
Buenas Debci. Si llegué a utilizar threads, aunque, como no los había usado antes leí que cometí un mal uso, por lo que no se si el error estaba ahí. En el desarrollo del trabajó necesité 2 threads, el primero que creé lo hice extendiendo de Thread y sobrecargando el método run..., esa parte me funciona a las mil maravillas pero leí que es una mala práctica, ya que luego necesité crear otro y me decidí a hacerlo de otra forma preguntándole a Google. El segundo que creé lo que hice fue implementar Runnable y llamar al thread: new Thread(new servidor()).start(); Ahí es donde comencé a tener problemas, puede que se petara por tener el primer thread con el run() machacado, es algo que desconozco porque nunca he trabajao con threads antes y por eso acudí al foro. Una vez que separé el servidor de mi aplicación y observé que aun así se me quedaba bloqueado, terminé echándole las culpas a swing, ya que ejecuto dos .jar distintos, mi aplicación y el segundo, el server, el cual es llamado desde mi aplicación. Así que no se... ¿Es mejor hacerlo implementando Runnable en vez de extender de la clase Thread?, lo cambiaré y contaré como fue la cosa. Un saludo!!.
|
|
|
En línea
|
|
|
|
Debci
Wiki
Desconectado
Mensajes: 2.021
Actualizate o muere!
|
Buenas Debci. Si llegué a utilizar threads, aunque, como no los había usado antes leí que cometí un mal uso, por lo que no se si el error estaba ahí. En el desarrollo del trabajó necesité 2 threads, el primero que creé lo hice extendiendo de Thread y sobrecargando el método run..., esa parte me funciona a las mil maravillas pero leí que es una mala práctica, ya que luego necesité crear otro y me decidí a hacerlo de otra forma preguntándole a Google. El segundo que creé lo que hice fue implementar Runnable y llamar al thread: new Thread(new servidor()).start(); Ahí es donde comencé a tener problemas, puede que se petara por tener el primer thread con el run() machacado, es algo que desconozco porque nunca he trabajao con threads antes y por eso acudí al foro. Una vez que separé el servidor de mi aplicación y observé que aun así se me quedaba bloqueado, terminé echándole las culpas a swing, ya que ejecuto dos .jar distintos, mi aplicación y el segundo, el server, el cual es llamado desde mi aplicación. Así que no se... ¿Es mejor hacerlo implementando Runnable en vez de extender de la clase Thread?, lo cambiaré y contaré como fue la cosa. Un saludo!!. Es mas rapido y eficaz hacerlo directamente con Thread, ademas, si pones un bucle while o for dentro del thread de ejecucion de Swing (No olvides que es un thread) lo que haces es saturar la interfaz y provocar cosas como esta. Un saludo
|
|
|
En línea
|
|
|
|
|
|