Java - InputStream lee lo que se ha enviado antes.

 
Vista:

InputStream lee lo que se ha enviado antes.

Publicado por José (4 intervenciones) el 29/12/2006 12:51:18
Hola.

Hice un programa en Java para enviar y recibir datos por el puerto serie con javax.comm y, aunque está muy verde, funciona sólo hay un detealle y es que envío una cadena y me devuelve la cadena y la respuesta. Ejemplifco la ejecución del programa:

Cadena enviada: at <- Es un println para saber por dónde va el programa.
at <- Esto es lo que no sé pq aparece. No hay ningún println.
OK <- Respuesta del móvil.

Pongo el código que es muy sencillo ya que estoy haciendo pruebas sólo.

import javax.comm.*;
import java.util.*;
import java.io.*;

public class PuertoSerie
{
public void PuertoSerie()
{
}

public static void main(String[] args) throws NoSuchPortException, PortInUseException, IOException,UnsupportedCommOperationException
{
String cadena = "at\r";
CommPortIdentifier idPuerto = CommPortIdentifier.getPortIdentifier("COM1");
SerialPort puerto = (SerialPort)idPuerto.open("SerialPort", 3000);
puerto.setSerialPortParams(9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);

OutputStream os = puerto.getOutputStream();
InputStream is = puerto.getInputStream();

System.out.println( "Cadena enviada: " + cadena );

os.write( cadena.getBytes() );

char c = ' ' ;
String answer = "";

boolean continuar = true;

while ( continuar )
{
c = (char)is.read();
answer = answer + c;
System.out.print( c );
}

is.close();
os.close();
}

}

Agradezco cualquier aportación para buscar la respuesta a esta intriga.

Muchas gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:InputStream lee lo que se ha enviado antes.

Publicado por mai (17 intervenciones) el 29/12/2006 14:41:12
Has definido tu cadena como at
String cadena = "at\r";

si no haces ningún cambio en ella y la muestras te aparecera at

System.out.println( "Cadena enviada: " + cadena );
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:InputStream lee lo que se ha enviado antes.

Publicado por José (4 intervenciones) el 29/12/2006 15:05:55
Claro, con eso pretendo sacar por consola que el at se ha enviado al teléfono móvil.

El problema es que el at que aparece solo no debería aparecer y la jecución del programa en lugar de ser:

Cadena enviada: at
at
OK

debería de ser:

Cadena enviada: at
OK

El at del medio no sé de dónde sale ni por qué. Yo creo que es el InputStream que lee lo que envía el OutputStream, algo así como si leyera lo que entra y lo que sale.

Gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:InputStream lee lo que se ha enviado antes.

Publicado por Gonzalo (180 intervenciones) el 30/12/2006 12:29:55
Sería importante saber qué es lo que tienes conectado al otro lado del puerto. Más que nada porque es muy posible que sea eso lo que esté devolviendo la petición y la respuesta.

Hay una funcionalidad llamada echo que es bastante habitual en este tipo de comunicaciones y lo que hace es precísamente repetir la petición tal cual le ha llegado antes de dar la respuesta para que se sepa si realmente la petición ha llegado bien o no.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:InputStream lee lo que se ha enviado antes.

Publicado por José (4 intervenciones) el 30/12/2006 12:40:21
Gracias Gonzalo. Probaré el echo.

Lo que tengo conectado al COM1 es un teléfono móvil que funciona como módem.

Si envío el at desde el myperterminal sólo devuelve OK, es decir, no me devuelve el at y el OK tal y como lo haría un módem corriente.

Te agradezco de nuevo la respuesta e investigaré el echo a ver si depuro algo.

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:InputStream lee lo que se ha enviado antes.

Publicado por José (4 intervenciones) el 30/12/2006 19:15:41
Hola de nuevo.

No he encontrado nada sobre el echo pero sí un programa que monitoriza el puerto serie llamado serial port monitor.

La cuestión es que la ejecución del programa en consola debería ser:
at

OK

y el monitor devuelve:
at
at

.OK
.

Al parecer, es lo que interpreto, de alguna forma, y no sé por qué, yo envío un at el programa o bien envía otro el el InputReader lee el propio at que he enviado antes.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar