Article View: es.comp.lenguajes.java
Article #17113Re: Fin de comunicaci�n con sockets
From: GP
Date: Wed, 06 Dec 2000 00:00
Date: Wed, 06 Dec 2000 00:00
179 lines
6643 bytes
6643 bytes
Creo que lo que necesitas hacer es crear un thread para cada conexion o sea
cada cliente, cuando el servidor acepta la conexion se debe crear un nuevo
thread y cuando el cliente salga de la conexion el thread te da la
Exception.
Saludos.
GP
http://lotmex.tripod.com
"Joseba Montejo" <software@zigor.com> wrote in message
news:8vj9oi$j74$1@lola.ctv.es...
> Mil disculpas, ah� os va el programa:
>
>
/***************************************************************************
> *********/
> /* EthernetSerie.java
> Programa que hace una comunicaci�n transparente entre
> ethernet y linea serie.
> La comunicaci�n se hace con sockets TCP, por el puerto 7.
> La comunicaci�n por puerto serie se hace a 9600 baudios,
> 8 bits de datos, sin paridad, 1 bit de stop.
> La aplicaci�n termina cuando se recibe por la ethernet
> el car�cter 'X'.
> */
>
> import java.io.*;
> import java.net.*;
> import java.util.*;
> import javax.comm.*;
>
> public class EthernetSerie
> {
> static CommPortIdentifier portId; // Identificador del puerto.
>
> public static void main(String[] args) throws IOException
> {
> ServerSocket servidor; // Socket servidor.
> Socket cliente; // Socket de atenci�n al cliente.
>
> SerialPort PuertoSerie; // Manejador del puerto serie.
>
> TransfesorDeBytes EthernetASerie;
> TransfesorDeBytes SerieAEthernet;
>
> servidor = new ServerSocket( 7 ); // Se asocia el socket servidor con
> el puerto 7.
> // System.out.println( "socket creado" );
>
> do {
> // Esperar a que se realice una conexi�n.
> System.out.println("Esperando conexi�n...");
> cliente = servidor.accept(); // Asignar la conexi�n al socket
> cliente.
> System.out.println( "��Conectado!!" );
>
> // Crear el manipulador de puerto serie.
> try {
> portId = CommPortIdentifier.getPortIdentifier("COM1");
> }
> catch (NoSuchPortException e) {
> System.out.println("No existe el puerto serie especificado.");
> }
> try {
> // Abrir el puerto.
> PuertoSerie = (SerialPort)portId.open("EthernetSerie",1000);
> try {
> PuertoSerie.setSerialPortParams( 9600,
> SerialPort.DATABITS_8,
> SerialPort.STOPBITS_1,
> SerialPort.PARITY_NONE);
> System.out.println("Puerto abierto");
>
> // Atender a la comunicaci�n.
> EthernetASerie = new TransfesorDeBytes(
cliente.getInputStream(),
> PuertoSerie.getOutputStream() );
> SerieAEthernet = new
> ransfesorDeBytes( PuertoSerie.getInputStream(),
cliente.getOutputStream() );
> do {
> // Esperar a que los dos procesos est�n en marcha.
> } while (!(EthernetASerie.isAlive() &&
SerieAEthernet.isAlive()));
> System.out.println("Comunicaci�n en marcha...");
> do {
> // Esperar a que se cierre la comunicaci�n.
> // Normalmente se saldr� porque el cliente corta la conexi�n.
> } while (EthernetASerie.isAlive() && SerieAEthernet.isAlive());
> System.out.println("Se vuelve a esperar una conexi�n.");
> // Destruir los transfesores de caracteres.
> EthernetASerie.stop();
> SerieAEthernet.stop();
> // Una vez finalizada la comunicaci�n, cerrar el socket y la
linea
> serie.
> PuertoSerie.close();
> cliente.close();
> }
> catch (javax.comm.UnsupportedCommOperationException e) {
> System.out.println("No se ha podido configurar el puerto");
> }
> }
> catch (javax.comm.PortInUseException e) {
> System.out.println("El puerto serie est� abierto por otra
> aplicaci�n");
> }
> } while (Character.toUpperCase((char)System.in.read()) != 'X');
> servidor.close();
> System.out.println("Aaaaadios");
> }
> }
>
>
> class TransfesorDeBytes extends Thread
> {
> private BufferedReader BufEntrada;
> private OutputStream BufSalida;
>
> public TransfesorDeBytes (InputStream BufferEntrada, OutputStream
> BufferSalida)
> {
> // Asignar los buffer a los que se pasan desde la clase llamante.
> BufEntrada = new BufferedReader(new InputStreamReader(BufferEntrada));
> BufSalida = BufferSalida;
> // Poner en marcha la transferencia de bytes.
> start();
> }
>
> public void run()
> {
> int caracter;
>
> try {
> do {
> caracter = BufEntrada.read();
> if (caracter != -1) {
> // Hay alg�n byte para ser leido.
> BufSalida.write( caracter ); // Transferir el byte recibido.
> BufSalida.flush();
> System.out.print( caracter );
> }
> BufSalida.flush();
> } while (true);
> }
> catch (java.io.IOException e) {
> // Ha habido una excepci�n, por lo que se detiene la ejecuci�n del
> proceso.
> System.out.println("Se ha parado uno de los procesos.");
> stop();
> }
> }
> }
>
>
/***************************************************************************
> *********/
>
> --
> Joseba Montejo
> Corporaci�n ZIGOR S.A.
> S. Miguel de Acha 4
> 01010 VITORIA
> Spain
> software@zigor.com
> http://www.zigor.com
>
> Zorro <noexisto@noexisto.com> escribi� en el mensaje de noticias
> 8vj8d1$221$1@talia.mad.ttd.net...
> > �Y d�nde est� el programa?
> >
> >
> >
>
>
>
Technical Details
Message-ID:
<%4FX5.305$4W.111492@nntp1.onemain.com>Path:
arc1-ca.pugleaf.net!unknown!not-for-mailReferences:
<8vbekr$u8$1@lola.ctv.es> <8vd712$eii$1@talia.mad.ttd.net> <8vdlmi$pmf$1@talia.mad.ttd.net> <8vgp91$n8m$1@lola.ctv.es> <8vhfnj$brj$06$1@news.t-online.com> <8viu4v$7tt$1@lola.ctv.es> <8vj8d1$221$1@talia.mad.ttd.net> <8vj9oi$j74$1@lola.ctv.es>Show Full Headers
Complete Article Headers
X-Google-Language: SPANISH,ASCII X-Google-Thread: 1116f3,6d6e03ba0ddc8a12 X-Google-Attributes: gid1116f3,public From: "GP" <osovallejo@hotmail.com> Subject: Re: Fin de comunicaci�n con sockets Date: 2000/12/06 Message-ID: <%4FX5.305$4W.111492@nntp1.onemain.com> X-Deja-AN: 702048995 References: <8vbekr$u8$1@lola.ctv.es> <8vd712$eii$1@talia.mad.ttd.net> <8vdlmi$pmf$1@talia.mad.ttd.net> <8vgp91$n8m$1@lola.ctv.es> <8vhfnj$brj$06$1@news.t-online.com> <8viu4v$7tt$1@lola.ctv.es> <8vj8d1$221$1@talia.mad.ttd.net> <8vj9oi$j74$1@lola.ctv.es> X-Priority: 3 X-MimeOLE: Produced By Microsoft MimeOLE V5.00.2919.6700 X-Complaints-To: abuse@onemain.com X-Trace: nntp1.onemain.com 976166331 209.239.218.146 (Thu, 07 Dec 2000 00:18:51 EST) Organization: intelekto Software X-MSMail-Priority: Normal NNTP-Posting-Date: Thu, 07 Dec 2000 00:18:51 EST Newsgroups: es.comp.lenguajes.java