Article View: es.comp.lenguajes.java
Article #17284RE: Fin de comunicaci�n con sockets
From: Joseba Montejo
Date: Thu, 23 Nov 2000 00:00
Date: Thu, 23 Nov 2000 00:00
156 lines
5902 bytes
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-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>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