Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   Rececpción de buffer incerrecta ?¿ (https://www.clubdelphi.com/foros/showthread.php?t=40929)

Gagiel 02-03-2007 09:11:22

Rececpción de buffer incerrecta ?¿
 
Hola

Tengo una aplicación que recibe un buffer proviniente de la red i trata el string en una base de datos.
Las comunicaciones funcionan correctamente.
El problema es la recepción de la cadena de caracteres.
Me explico; el trozo de codigo donde se trata la cadena es el siguiente:
Código:

procedure ServerReceive(ID: integer; Buffer: ETCPBuffer; Size: integer);
var Recepcio : string[255];
var Correcte : integer;
var i : integer;
var Enviar : string[3];
var Client : string[255];
var Ip : String[255];
begin
  Enviar:= 'ACK';
  move(Buffer[0], Recepcio, Size);
  Delete(Recepcio, 17, Length(Recepcio)-16);

Al final me sale un string con la información que quiero.
El problema esta en que si yo desde local envio:
1234567890123456
recibo
1234567890123456
en cambio si envio desde la red:
1234567890123456
lo que recibo(O el programa lee) es lo siguiente:
234567890123456
Es decir "se come" el primer caracter, lo he probado con un cliente hardware, uno de software de delphi otro de Visual Basic i siempre pasa lo mismo. Tengo un servidor parecido hecho en Visual Basic i no pasa, por lo que creo que es problema de mi Buffer que elimina el primer caracter....
Sabeis como se puede arreglar? ya que me está trayendo de cabeza porqué no logro entender el porqué en local si que funciona i en remoto se come el caracter.

Gracias!

Saludos.

Gagiel 02-03-2007 09:34:32

Hola

Me respondo a mi mismo...
Se ve que para encontrar la solución tengo que postear i me viene sola xD (llevava unos dias tras esto)
El tema está en que al hacer el move el buffer se vuelca en Recepcio pero la copia se realiza desde el caracter [0] i delphi al leer el string lo hace a partir del caracter [1].

Lo que he hecho es simplemente lo siguiente:
Código:

move(Buffer, Recepcio, 16);
Recepcio:= Recepcio[0] + Recepcio;

Lo que hace esto es mover la posicion [0] del string a la posición [1].

Saludos

roman 02-03-2007 09:39:27

No sabría yo cuál es el problema pero ese move lo veo raro. Creo que deberías mover no hacia Recepcio, sino hacia Recepcio[1] y luego asignar a Recepcio[0] la longitud del string en lugar de ese Delete.

EDITO

¡Oh! Veo que ya resolviste el misterio :)

// Saludos

Gagiel 05-03-2007 11:07:38

Hola,

Tengo un (varios) problema con el buffer.

Con el "apaño" que he hecho funciona, pero no me convence... si alguien tiene otra opción... :s


Otra cosa, el buffer que me llega proviene de una conexión TCP con lo que me llega lo que han mandado más una colección de caracteres "raros", el problema esta en que lo recibido va a una base de datos y al probar de meter estos caracteres da error, las recepciones no son de un numero de caracteres fijo.

Tenes la salvación para mi?

Gracias!

Saludos! :)


La franja horaria es GMT +2. Ahora son las 18:12:09.

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