Foros del Web » Programación para mayores de 30 ;) » Java »

sockets y threads

Estas en el tema de sockets y threads en el foro de Java en Foros del Web. hola! estoy intentando comunicar por sockets dos ordenadores. LA comunicación funciona perfecta, pero quiero hacer que se pueda tanto recibir como transmitir siempre que se ...
  #1 (permalink)  
Antiguo 01/07/2011, 02:25
 
Fecha de Ingreso: marzo-2009
Mensajes: 509
Antigüedad: 15 años, 1 mes
Puntos: 17
sockets y threads

hola! estoy intentando comunicar por sockets dos ordenadores.

LA comunicación funciona perfecta, pero quiero hacer que se pueda tanto recibir como transmitir siempre que se quiera, para ello creo dos thread, una receptora y otra transmisora:

Código:
public class transmisor extends Thread{

	Socket cliente;
	
	public transmisor(Socket Cliente){
		this.cliente=Cliente;
	}
	
	public void run(){
	
		while(cliente.isBound()){
			try{
			
				java.util.Scanner in = new java.util.Scanner(System.in);
				String enviar = in.nextLine();
				
				OutputStream bufferSalida = cliente.getOutputStream();  
				DataOutputStream datos = new DataOutputStream(bufferSalida);
				datos.writeUTF(enviar);
			} catch (Exception e){
				e.printStackTrace();
			}
		}	
		this.destroy();
	}	
}
Código:
public class receptor extends Thread{
	
	Socket cliente;
	
	public receptor(Socket Cliente){
		this.cliente=Cliente;
	}

	public void run(){
		while(cliente.isBound()){
			try{
				InputStream aux = cliente.getInputStream();
				DataInputStream flujo = new DataInputStream( aux );
	
				System.out.println("recibo: " + flujo.readUTF());
			} catch (Exception e){
				e.printStackTrace();
			}
		}
		this.destroy();
	}
}
Dice qeu destroy() está "deprecated" y me gustaría utilizar métodos acutalizados, pero todos loque ppongo que conozco, destroy(), stop(), nada, que "deprecated"... ¿Cómo puedo hacerlo?


Si no pongo nada, como el programa sale de l while() y acaba, el thread se eliminaría¿???

Gracias!

Última edición por cucuru; 01/07/2011 a las 02:37
  #2 (permalink)  
Antiguo 01/07/2011, 02:52
 
Fecha de Ingreso: marzo-2009
Mensajes: 509
Antigüedad: 15 años, 1 mes
Puntos: 17
Respuesta: sockets y threads

Bueno,... después de mis pruebas, resulta que mi linea:

Código:
		while(cliente.isBound()){
No funciona...

Código:

java.net.SocketException: Connection reset
        at java.net.SocketInputStream.read(SocketInputStream.java:113)
        at java.net.SocketInputStream.read(SocketInputStream.java:182)
        at java.io.DataInputStream.readUnsignedShort(DataInputStream.java:320)
        at java.io.DataInputStream.readUTF(DataInputStream.java:572)
        at java.io.DataInputStream.readUTF(DataInputStream.java:547)
        at receptor.run(receptor.java:20)
¿Porque?

Gracias!
  #3 (permalink)  
Antiguo 01/07/2011, 03:01
 
Fecha de Ingreso: marzo-2009
Mensajes: 509
Antigüedad: 15 años, 1 mes
Puntos: 17
Respuesta: sockets y threads

Me voy respondiendo yo sola.... los métodos isBound() e isConnected() sólo comprueban si se puede conectar o si se ha conectado, pero no si sigue viva.

entonces... mi solución sería "matar" mi hilo en el catch de la excepción, no???
  #4 (permalink)  
Antiguo 01/07/2011, 03:11
 
Fecha de Ingreso: marzo-2009
Mensajes: 509
Antigüedad: 15 años, 1 mes
Puntos: 17
Respuesta: sockets y threads

Lo he solucionado a medias gracias chuidiang! Gracias!!

http://chuwiki.chuidiang.org/index.p...rminar_un_hilo

El receptor perfecto

¿Cómo puedo avisar a la hebra emisora que también debe ser eliminada?
  #5 (permalink)  
Antiguo 01/07/2011, 05:27
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 6 meses
Puntos: 454
Respuesta: sockets y threads

Hola:

Si el receptor se cierra bien con un close(), es posible que en el transmisor te funcione el isConnected().

En cualquier caso, puedes dejar en el transmisor while(true) y si el cliente cierra, al escribir te saltarça una excepción, basta hacer un return; para terminar el método run() y el hilo se cierra.

Se buena.
__________________
Apuntes Java
Wiki de Programación
  #6 (permalink)  
Antiguo 01/07/2011, 06:14
 
Fecha de Ingreso: marzo-2009
Mensajes: 509
Antigüedad: 15 años, 1 mes
Puntos: 17
Respuesta: sockets y threads

Algo así estoy intentando, sin embargo, por más que intento opciones no se como hacer para decirle un caracter el qeu sea.

Código:
		    if(conexAbierta){
				java.util.Scanner in = new java.util.Scanner(System.in);
				String enviar = in.nextLine();
		    } else {
		    	enviar = "nada";
		    }
Sin embargo, como el "if" ya lo ha pasado antes, está pendiente de la lectura del teclado

Saludos

Etiquetas: sockets, threads
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:58.