Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Providers (https://www.clubdelphi.com/foros/forumdisplay.php?f=10)
-   -   Paquetes Recibidos UDP (https://www.clubdelphi.com/foros/showthread.php?t=54647)

Rockin 26-03-2008 14:17:22

Paquetes Recibidos UDP
 
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.

Código Delphi [-]
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;

Código Delphi [-]
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


La franja horaria es GMT +2. Ahora son las 16:37:26.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi