Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2723 connectés 

  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

  envoi / reception d'objets avec ICS

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

envoi / reception d'objets avec ICS

n°1275259
adrien357
Posté le 31-12-2005 à 11:40:52  profilanswer
 

Bonjour,
j'ai maintenant bien compris le fonctionnement (assez simple il faut l'avouer) de Send et Receive (de la librairie ICS), après avoir relu quelques tutos sur les pointeurs :)
 
J'arrive donc à envoyer tous les types de données simples, mais pas des types de ma création... du moins ça marchait avant, et je ne sais pas ce que j'ai changé et ça ne fonctionne plus ! Je pense que l'erreur se trouve dans le calcul du Buffer envoyé / reçu...
 
petit exemple :
-------------------------
TPerso = class
nom : string;
age : integer;
 
[...]
 
procedure envoi de données : // dans le client
var Buffer : ^TPerso
begin
Perso := TPerso.Create;
Perso.nom := 'toto';
Perso.age := 13;
Buffer^ := Perso;
SerSocket.Send(Buffer, SizeOf(Buffer));
 
 
procedure qui reçoi les données : // dans le serveur
var Buffer : ^TPerso
Socket.Receive(Buffer, SizeOf(Buffer));
ShowMessage(Buffer^.name); // erreur....
-------------------------------------------------
 
bien sur j'ai pris soin de faire les new(buffer) et dispose(buffer), ainsi que de détruire les objets après utilisation. J'obtiens a l'exécution des exception "Access Violation" côté serveur, dès que je tente d'accéder a un paramètre de l'objet.
 
J'ai essayé de spécifier Taille Du Buffer = Taille de l'objet + taille des paramètres mais ça ne marche pas mieux...
 
Delphicalement...
Adrien

mood
Publicité
Posté le 31-12-2005 à 11:40:52  profilanswer
 

n°1275879
antp
Super Administrateur
Champion des excuses bidons
Posté le 02-01-2006 à 15:24:55  profilanswer
 

Je suis pas sûr de comprendre... tu envoies un pointeur par le réseau et tu espères que de l'autre côté tu pourras accéder aux données de l'expéditeur via ce pointeur ? [:wam]


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°1275883
adrien357
Posté le 02-01-2006 à 15:29:47  profilanswer
 

C'est les fonctions "Send" et "Receive" qui font le travail :)
Elles copient le contenu du pointeur pour l'envoyer ensuite !

n°1275898
antp
Super Administrateur
Champion des excuses bidons
Posté le 02-01-2006 à 15:53:30  profilanswer
 

Ça me semble étrange, vu qu'elle ne peuvent pas deviner la taille des données qui sont derrière (ou alors il y a un truc qui m'échappe, mais bon, si tu passes un pointeur non typé ça devient juste un entier contenant une adresse, celui qui le reçoit ne sais plus à quoi ça correspond).
Mais soit, même en admettant que ce soit possible, la variable de type "string" est elle même un pointeur. Et là ça coince de toute façon, même si le contenu de l'objet est copié.


Message édité par antp le 02-01-2006 à 15:54:24

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°1275900
antp
Super Administrateur
Champion des excuses bidons
Posté le 02-01-2006 à 15:55:55  profilanswer
 

Et en plus:
 
Buffer^ := Perso;  
buffer est non initialisé et tu dis de mettre une copie du pointeur de perso à l'adresse pointée par Buffer... ça explose d'office.
 
à la limite tu mettrais  
Buffer := @Perso;  
ça serait plus logique
 
(et sizeof de Buffer, ça donne 4, la taille d'un pointeur, non ?)


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°1275901
adrien357
Posté le 02-01-2006 à 15:59:05  profilanswer
 

Oui y avait bien un 1er pbm avec la taille envoyée / reçue qui ne devait pas être celle du pointeur mais celle de l'objet...
 
ensuite le "string" j'ai mis ça a la va-vite pour l'exemple, sinon c'est une string[11] qui est envoyée.
 
Et j'ai résolu mon problème en utilisant des Record au lieu des objets. :)
 
merci quand même !
Adrien

n°1275983
antp
Super Administrateur
Champion des excuses bidons
Posté le 02-01-2006 à 17:44:25  profilanswer
 

bah oui avec des record et des ShortString ça marche tout de suite mieux :D


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°1276005
adrien357
Posté le 02-01-2006 à 18:10:44  profilanswer
 

Tu connais ICS ? parce que j'ai des pbms par contre pour envoyer du serveur vers le client... je vois pas ce qu'il y a de spécial à savoir pour faire ça ! (en UDP)
 
Byouuu

n°1276056
antp
Super Administrateur
Champion des excuses bidons
Posté le 02-01-2006 à 20:09:54  profilanswer
 

Non, là désolé je peux pas t'aider, je n'ai utilisé qu'Indy (et encore, juste pour du HTTP) et les composants Socket fournis avec Delphi.


Message édité par antp le 02-01-2006 à 20:10:09

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

  envoi / reception d'objets avec ICS

 

Sujets relatifs
Classe abstraite et tableau d'objetsAcceder aux objets d'un clip chargé dans un clip principal
[PHP/PDF] slution automatique d'envoi de PDFpar faxRéception d'un mail en VBA
Socket ICSObjets et evenements en javascript?
envoi de mail html avec piece jointeSocket et envoi d'images ???
Formulaire d'inscription qui envoi tout par mail?Envoi d'un mail à l'internaute si "Oui" est coché
Plus de sujets relatifs à : envoi / reception d'objets avec ICS


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR