Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 25-05-2006
Status Quo Status Quo is offline
Miembro
 
Registrado: may 2006
Posts: 23
Poder: 0
Status Quo Va por buen camino
mas sobre pchar

es verdad!!! gracias...

No os lo vais a creer pero sigo teniendo problemas
Seoane lo que me has recomendado me ha parecido genial pero ahora estoy intentando añadir un pchar a otro de la siguiente manera y no lo consigo:

Código Delphi [-]
// Antes de esto hago: leidos:=stream.Read(buffer^,SizeOf(buffer));

repeat
            Application.ProcessMessages;
            GetMem(Cabecera,256);
            GetMem(Bufferaux,3072);
            try
                Fillchar(bufferaux^,2304,0);
                Cabecera:=PChar(formatFloat('0000',length(buffer))+ 't');
                StrCopy(Bufferaux,Cabecera);
                Aux:=Bufferaux + StrLen(Bufferaux) +1;
                move(buffer^,Aux^,sizeof(buffer));
                ClientSocket2.Socket.SendBuf(BufferAux^,SizeOf(BufferAux)); 
                //En BufferAux solo tengo el valor de la cabecera, pero no me  
               //añade el de buffer

            finally
                FreeMem(Cabecera);
                FreeMem(Bufferaux);
            end;
              
            leidos:=stream.Read(buffer^,SizeOf(buffer));
        until(leidos=0);
        stream.Free;

En BufferAux solo tengo el valor de la cabecera, pero no me añade el de buffer. Lo he comprobado paso a paso y en buffer si mete contenido...me estoy montando unos lios...Perdonar por ser tan pesao

Última edición por dec fecha: 25-05-2006 a las 20:41:48.
Responder Con Cita
  #2  
Antiguo 25-05-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 26
seoane Va por buen camino
Creo que el problema debe de estar aqui:

Código Delphi [-]
move(buffer^,Aux^,sizeof(buffer));

Date cuenta que sizeof(buffer) siempre valdra 4 ya que ese es el tamaño de un PChar (si buffer es un PChar que tampoco lo aclaras), y no tiene nada que ver con el contenido de la memoria al que apunta ese puntero. Pero la verdad es que ya me estoy empezando a perder con tu codigo No estoy seguro de lo que estas intentando hacer pero tiene que haber alguna manera mas sencilla de hacerlo.
Responder Con Cita
  #3  
Antiguo 25-05-2006
Status Quo Status Quo is offline
Miembro
 
Registrado: may 2006
Posts: 23
Poder: 0
Status Quo Va por buen camino
aclaración

Perdona..esque no me aclaro ni yo.
Quiero mandar un fichero de un pc a otro por medio de sockets.
Eso es fácil. Me exigen que no se envíe el fichero entero si no a trozos. He conseguido mandarlos a trozos(me ha costado pero lo logré...) y ahora lo que quiero es incluir en cada paquete que mando una cabecera con tamaño de paquete y tipo...(En realidad no sirve para nada pero lo tengo que hacer)
vamos que tengo que mantar paquetes que tengan:
-tamaño
-tipo
-datos

cuando se reciban estos paquetes tengo que extraer la cabecera y incluir los datos en el fichero...
Y eso es todo...

He trabajado otras veces con sockets pero siempre he mandado texto y trabajaba bastante bien, pero como tengo que poder mandar ficheros de todo tipo..
Otros compañeros míos lo han hecho con Java mandando un objeto trama con los campos de tamaño...y bytes y les ha salido, pero yo me he empeñado en hacerlo con delphi.

Me esta agobiando un montón esto, gracias por echarme una mano de verdad...(:

por cierto, el buffer...anteriormente hago getmen(buffer,1024)

Última edición por Status Quo fecha: 25-05-2006 a las 20:56:11.
Responder Con Cita
  #4  
Antiguo 25-05-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 26
seoane Va por buen camino
Se me ocurre que puedes usar records para hacer lo que te pidieron. Me explico, primero declaras un tipo de record que sera el que utilices para enviar y recibir los trozos:

Código Delphi [-]
type
  Paquete = record
    Tipo: Integer;           // Uso un integer pero un char tambien valdria
    Tamano: Integer;
    Buffer: array[0..1024] of Byte;
  end;

Luego solo tienes que usar ese paquete durante la transmision:
Código Delphi [-]
var
  P: Paquete;
begin
  P.Tipo:= 1; 
  P.Tamano:= stream.Read(P.Buffer,SizeOf(P.Buffer));  
  Cliente.Socket.SendBuf(P,sizeof(P))
end;

Y durante la recepcion
Código Delphi [-]
var
  P: Paquete;
begin
  Socket.ReceiveBuf(P, Sizeof(P));
  // Si lo quisieramos guardar en un stream
  stream.WriteBuffer(P.Buffer, P.Tamano);
end;

El unico problema es que si el ultimo paquete no lo llenamos por completo, estaremos enviando mas bytes de los necesarios, pero como tambien enviamos el tamaño ese no seria un problema. Y es enormemente mas sencillo que andar haciendo malabares con punteros

¿que te parece?

Última edición por seoane fecha: 25-05-2006 a las 21:43:36.
Responder Con Cita
  #5  
Antiguo 25-05-2006
Status Quo Status Quo is offline
Miembro
 
Registrado: may 2006
Posts: 23
Poder: 0
Status Quo Va por buen camino
Talking Gracias

Gracias!!!!!!!!! nunca he trabajado con eso (soy muyyyy novato)
Me parece que lo que me has dicho va a ser la solución a mis males...
ya me temía yo que me estaba complicando demasiado la vida...
Gracias, gracias de verdad...

voy a ponerme a ello inmediatamente...
Ni te imaginas el favor que me acabas de hacer!!!!!!!!!!!!

Última edición por Status Quo fecha: 25-05-2006 a las 21:44:34.
Responder Con Cita
  #6  
Antiguo 25-05-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 26
seoane Va por buen camino
No podiamos consentir que tus compañeros lo hiceran en Java y tu no lo hiceras en Delphi, por favor ...
Responder Con Cita
  #7  
Antiguo 26-05-2006
Status Quo Status Quo is offline
Miembro
 
Registrado: may 2006
Posts: 23
Poder: 0
Status Quo Va por buen camino
Smile Más consultas sobre el tema

jejeje...delphi al poder!!!

He utilizado lo de los record (que buena idea! ) y normalmente me va bien sobre todo en los ficheros jpg pequeños...
Los word los estropea...no se. Vamos que a veces me va bien y a veces mal...Esta tarde cuando llegue a mi casa añado el código.

Yo creeo que envíar, los envía bien...el problema creo que es al recibirlos porque a lo mejor no llegan completos, no sé...

Yo cuando he utilizado socket para mandar texto lo iba encolando en un string, si la variable cola(de tipo string) era mayor que 2(tamaño del campo de tamaño de mensaje) cojía el tamaño (lo pasaba a entero). Luego comparaba el tamaño de la cola de mensajes con el campo de tamaño y si era mayor o igual extraía el mensaje y lo borraba de la cola... y de esta manera aseguraba que los mensajes llegaran completos
Bueno eso hacía e iba muy bien.
No se si será necesario encolar los bytes...(no tengo ni idea de como encolar, recoger en mi estructura y eliminar bytes de una cola de bytes pero bueno...)

Bueno esta tarde os lo cuento mejor con código incluido a ver que os parece...
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Recorrer arreglo Perrero80 Varios 3 18-05-2006 22:52:27
Compatibilidad entre PChar y String vick Conexión con bases de datos 5 24-10-2005 21:50:35
¿como pasar de String dentro de un PChar? Moises22 Varios 6 27-09-2005 15:43:47
Pchar y String superhopi Varios 8 19-08-2004 09:54:06
problemas de compatibilidad de tipos pchar y string VRO Varios 2 13-05-2004 10:29:34


La franja horaria es GMT +2. Ahora son las 20:59:43.


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