elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Detener la ejecución de este código.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Detener la ejecución de este código.  (Leído 7,897 veces)
23time

Desconectado Desconectado

Mensajes: 28



Ver Perfil
Detener la ejecución de este código.
« en: 9 Julio 2010, 23:52 pm »

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.

Código
  1. ServerSocket server;
  2.        Socket connection;
  3.  
  4.        DataOutputStream output;
  5.        BufferedInputStream bis;
  6.        BufferedOutputStream bos;
  7.  
  8.        byte[] receivedData;
  9.        int in;
  10.        String file;
  11.  
  12.        try{
  13.            server = new ServerSocket( 1234 );
  14.            g.setjTextField1("Servidor arrancado");
  15.  
  16.            while ( true ) {
  17.                connection = server.accept();
  18.  
  19.                receivedData = new byte[1024];
  20.                bis = new BufferedInputStream(connection.getInputStream());
  21.                DataInputStream dis=new DataInputStream(connection.getInputStream());
  22.  
  23.                //recibimos el nombre del fichero
  24.                file = dis.readUTF();
  25.                file = file.substring(file.indexOf('/')+1,file.length());
  26.                file = file.concat("_host");
  27.  
  28.                bos = new BufferedOutputStream(new FileOutputStream(file));
  29.                while ((in = bis.read(receivedData)) != -1){
  30.                    bos.write(receivedData,0,in);
  31.                }
  32.                bos.close();
  33.                dis.close();
  34.            }
  35.        }catch (Exception e ) {
  36.            System.err.println(e);
  37.        }
  38.  

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 Desconectado

Mensajes: 786


leyer@elhacker.net


Ver Perfil WWW
Re: Detener la ejecución de este código.
« Respuesta #1 en: 10 Julio 2010, 00:57 am »

al recibir uno solo ? usa un
Código
  1. break
y ya :xD

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 Desconectado

Mensajes: 37



Ver Perfil
Re: Detener la ejecución de este código.
« Respuesta #2 en: 13 Julio 2010, 01:15 am »

Código
  1.  while ( true ) {
  2.                connection = server.accept();
  3.  
  4.                receivedData = new byte[1024];
  5.                bis = new BufferedInputStream(connection.getInputStream());
  6.                DataInputStream dis=new   DataInputStream(connection.getInputStream());
  7.  
  8.                //recibimos el nombre del fichero
  9.                file = dis.readUTF();
  10.                file = file.substring(file.indexOf('/')+1,file.length());
  11.                file = file.concat("_host");
  12.  
  13.                bos = new BufferedOutputStream(new FileOutputStream(file));
  14.                while ((in = bis.read(receivedData)) != -1){
  15.                    bos.write(receivedData,0,in);
  16.                }
  17.                bos.close();
  18.                dis.close();
  19.  
  20.              break;
  21.  
  22.            }
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 Desconectado

Mensajes: 2.021


Actualizate o muere!


Ver Perfil WWW
Re: Detener la ejecución de este código.
« Respuesta #3 en: 13 Julio 2010, 09:40 am »

O cambia la condicion del while, porque de esa manera siempre se ejecuta.

Saludos
En línea

23time

Desconectado Desconectado

Mensajes: 28



Ver Perfil
Re: Detener la ejecución de este código.
« Respuesta #4 en: 24 Julio 2010, 04:17 am »

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 :D

Saludos!!.
En línea


Debci
Wiki

Desconectado Desconectado

Mensajes: 2.021


Actualizate o muere!


Ver Perfil WWW
Re: Detener la ejecución de este código.
« Respuesta #5 en: 24 Julio 2010, 10:47 am »

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 :D

Saludos!!.
La solucion a tu problema tiene un nombre:
THREADS!!!

Saludos
En línea

23time

Desconectado Desconectado

Mensajes: 28



Ver Perfil
Re: Detener la ejecución de este código.
« Respuesta #6 en: 24 Julio 2010, 18:32 pm »

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 Desconectado

Mensajes: 2.021


Actualizate o muere!


Ver Perfil WWW
Re: Detener la ejecución de este código.
« Respuesta #7 en: 24 Julio 2010, 18:41 pm »

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

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Detener ejecucion de Plugin de Jquery
Desarrollo Web
nevermind2403 2 2,722 Último mensaje 26 Febrero 2014, 15:53 pm
por #!drvy
detener ejecucion script php hasta que se envie correo
Desarrollo Web
astrojohan 4 3,209 Último mensaje 11 Diciembre 2017, 15:12 pm
por [u]nsigned
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines