PDA

Ver la Versión Completa : Paquetes Recibidos UDP


Rockin
26-03-2008, 14:17:22
Buenas, tengo una aplicación que escucha por un puerto UDP. La escucha la realiza correctamente y me llega el paquete, pero no se transformar el paquete que me llega a texto. Según el proveedor de la aplicacion manda un paquete con un tamaño de 264 bytes con estas especificaciones:

Los paquetes de datos enviados por SUTIL son del tipo UDP, siempre tienen 264 bytes de tamaño, y constan de los 3 siguientes campos:
– IDENTIFICADOR: Siempre debe contener 4 bytes ceros.
– TAMAÑO: (entero LSB de 4 bytes) es el tamaño del campo CONTENIDO en
bytes.
– CONTENIDO: (cadena de 256 caracteres) contiene la cadena que se quiere
enviar terminada con un byte cero (al estilo del lenguaje C), se rellena hasta los 256 car. con caracteres sin especificar.

Lo que quiero es quitar los 8 primeros Bytes que no me interesan y coger los siguientes, pero no se como poder hacerlo.

Si alguien se le ocurre algo que me ayude por favor.
Saludos.

cHackAll
26-03-2008, 14:59:22
No especificaste el componente que estas utilizando, pero creo que la mayoría de los mismos retorna en un puntero los datos recividos... en tal caso lo que debes hacer es guardar el paquete en uns estructura y acceder a los datos desde el tercer miembro del mismo.

procedure TForm1.UdpSocket1Receive(Sender: TObject; Buf: PAnsiChar; var DataLen: Integer);

type
PStruct = ^TStruct;
TStruct = record
id, Size: Cardinal;
Data: ShortString;
end;

begin
ShowMessage(PStruct(Buf)^.Data);
end;

dependiendo del componente tambien pedes leer del buffer primero los 8 bytes y luego el resto;

procedure TForm1.Button1Click(Sender: TObject);
var Buffer: array [0..255] of Char;
begin
UdpSocket1.ReceiveBuf(Buffer, 8); // skip
UdpSocket1.ReceiveBuf(Buffer, SizeOf(Buffer));

...

Saludos

Rockin
26-03-2008, 16:08:23
Perdon uso UDPServer de las Indy.

Voy a probarlo ahora mismo.

Saludos y gracias por la rapidez en la respuesta

Rockin
26-03-2008, 16:43:48
Hola, he probado lo que me comentas, pero con el componente TUDPSocket de la paleta Internet, no recibo nada.

Con el componente Indy recibo paquetes pero no consigo pasarlos a Texto, estoy desesperado. seguire mirando por ahi.

Saludos

JuanPa1
03-06-2008, 21:53:57
Hola Rockin:

Puedes pasarme la aplicación con el componente que te funciona a mi correo o puedes escribir el código aqui, creo que puedo ayudarte a resolver tu problema.

Saludos,
JuanPa1.

Rockin
04-06-2008, 21:54:05
Gracias, pero ya lo resolví.
Saludos