PDA

Ver la Versión Completa : Envío de records a través de sockets con Indy 10


madrid2003_6
08-05-2007, 17:47:49
buenas tardes.
Tengo un problema con una aplicacion que estoy haciendo.
Tengo una Record con 3 tipos de datos.
a : integer ;
b : integer;
c : String;
Como puedo enviar una estructura a traves de un socket? tengo que pasarlo a string?
Uso Indy10.

maxid
15-05-2007, 17:28:11
Nunca he usado sokets pero esto se hace para comunicaciones por puerto serie.
Crea una variable que apunte al registro que queres enviar y la envias como una secuencia de Byte, despues en tu receptor la distribuis en tu registro.

te aconsejo que al paquete le pongas un CRC, para controlar que llegue correcto, podes poner un lonint al final y hacer una suma de los bytes mas un shift a izq y en la recepcion un shift a la derecha y calcular la suma para ver si da ok. u otro metodo.. espero te sirva

Ejemplo

type
TRec = Record
c1:integer; // 8 bytes
c2:integer; // 8 bytes
c3:string[200]; //201 byte
end;

Var
rec: Tregistro
enviar: array [1..217]of byte absolute of rec; // creas una variable paralela a rec con lo cual al cambiar algo en rec te lo pasa a enviar como un byte

Begin

// enviar los bytes por el soket
soket1.enviar(enviar)
end;

en el receptor lo mismo

Var
rec: Tregistro
recibir: array [1..217]of byte absolute of rec;

Begin
// recibir los datos por el soket
recibir := soket1.recibir;

//en rec.c1 ya tenes tu enter listo para usar

end;

fide
07-06-2007, 03:42:24
Oye, en los demos de la Indy está visible un ejemplo que si más no recuerdo se llama SendReceiveRecords, en el cual se ilustra a la perfección como es posible enviar estas estructuras por la red.

:D Espero te sea útil… :D