🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: es.comp.lenguajes.java
Article #17284

RE: Fin de comunicaci�n con sockets

#17284
From: Joseba Montejo
Date: Thu, 23 Nov 2000 00:00
156 lines
5902 bytes
    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: <8vj9oi$j74$1@lola.ctv.es>
Path: arc1-ca.pugleaf.net!unknown!not-for-mail
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>

Show Full Headers
Complete Article Headers
X-Google-Language: SPANISH,ASCII
X-Google-Thread: 1116f3,6d6e03ba0ddc8a12
X-Google-Attributes: gid1116f3,public
From: "Joseba Montejo" <software@zigor.com>
Subject: RE: Fin de comunicaci�n con sockets
Date: 2000/11/23
Message-ID: <8vj9oi$j74$1@lola.ctv.es>
X-Deja-AN: 697078699
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>
X-Priority: 3
X-MimeOLE: Produced By Microsoft MimeOLE V5.00.2314.1300
X-Complaints-To: usenet@lola.ctv.es
X-Trace: lola.ctv.es 974989906 19684 62.36.89.30 (23 Nov 2000 14:31:46 GMT)
Organization: CTV/JET
X-MSMail-Priority: Normal
NNTP-Posting-Date: 23 Nov 2000 14:31:46 GMT
Newsgroups: es.comp.lenguajes.java