IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Web & réseau Delphi Discussion :

[D7][ICS] Envoi de record


Sujet :

Web & réseau Delphi

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 79
    Par défaut [D7][ICS] Envoi de record
    Salut à tous,

    Je dois faire un "réseau" pour dans 9h55, et j'espère qu'il y a un developpeur sympa qui traine encore ici avant qu'il ne soit trop tard.

    Bref, je tente d'envoyer une variable d'un type très simple, le type TMyType :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
      TMyType = record
        MyText : string;
      end;
    Le problème c'est qu'alors que j'arrive à envoyer des strings très facilement, envoyer ma variable de type TMyType pose problème.

    Ma procédure de reception (directement tirée des exemples fournis avec ICS) est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
      procedure TConUdpRcv.WSocketDataAvaible(Sender : TObject; ErrCode : Word);
      var
        buffer : TMyType; //<= ici ma variable de type TMyType
        Len    : integer;
        Src    : TSockAddrIn;
        SrcLen : Integer;
      begin
        SrcLen:= SizeOf(Src);
        Len:= WSocket.ReceiveFrom(@buffer, SizeOf(buffer), Src, SrcLen);
        Writeln('On recoit quelquechose de ', FSenderAddr.s_addr);
        if Len>= 0 then
        begin
          if (FSenderAddr.S_addr = INADDR_ANY) or (FSenderAddr.S_addr = Src.sin_addr.S_addr) then
          begin
            //Buffer[Len]:= #0;
            FCount:= FCount+1;
            writeln(IntToStr(FCount),
                    ' '+StrPas(inet_ntoa(Src.sin_addr)),
                    ':'+intToStr(ntohs(Src.sin_port)),
                    ' > '+StrPas(PChar(buffer.MyText))); // c'est sensé afficher le texte 
          end;
        end;
      end;

    Ma procédure d'envoi est aussi inspirée des fichiers fournis avec ICS :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
      procedure TConCli.Run;
      var
        test : TMyType;
      begin
        Done:= false;
        WSocket:= TWSocket.Create(nil);
     
        test.MyText:= 'kikou lol'; // j'initialise pour avoir quelquechose à récupérer de l'autre côté !
     
        WSocket.Proto:= 'udp';
        WSocket.Addr:= 'localhost';
        WSocket.Port:= '600';
     
        WSocket.OnSessionConnected:= WSocketSessionConnected;
        WSocket.OnSessionClosed:= WSocketSessionClosed;
        WSocket.OnDataAvailable:= WSocketDataAvailable;
        WSocket.Connect;
     
        while not Done do
        begin
          writeln('Appuie sur entrée pour envoyer un truc sexy =) : ',test.Mytext, '');
          readln;
            WSocket.Send(@test, SizeOf(test));
        end;
     
        WSocket.Destroy;
        Writeln('appuyez sur entrée pour quitter');
        readln;
      end;
    Voilà, quand je met une variable de type string, ça marche tout seul, mais dès que je tente d'envoyer mon test, ça compile, du côté du serveur on voit qu'on a reçu quelquechose, mais quand je demande de l'afficher, ça ne m'affiche rien.

    En mettant un breakpoint après le receive, et en testant la valeur des variables, ça me dit que buffer.MyText = '', alors qu'il devrait valoir 'kikoulol'.

    Voilà, j'espère que quelqun saura trouver où se situe mon problème.

    Cordialement,

    iLUV

  2. #2
    Membre confirmé
    Inscrit en
    Avril 2005
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 115
    Par défaut
    Il me semble que pour les enregistrements (record) il ne faut pas utiliser le type string, mais plutot quelque chose dans le genre string[n] ou n representera la taille maximum en octet de la chaine...
    il me semble que le type record necessite une taille prédéfinit, et je crois que le type string de delphi ne convient pas...

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 79
    Par défaut
    merci pour cette réponse rapide, c'est sympa, ça plante... différemment maintenant

    Alors au lieu de m'afficher 'kikou lol' ça m'affiche quelquechose de ... bizare.

    Alors j'ai tenté de changer MyString en MyInteger de type integer, je l'ai initialisé à 42, et je reçoit : 9772780...

    Je vois pas le problème :S

  4. #4
    Membre confirmé
    Inscrit en
    Avril 2005
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 115
    Par défaut
    Voila quelque chose qui expliquera peut etre mieux ce que je t'ais dit précédement http://perso.wanadoo.fr/bardou/michel/erreurs.html

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 79
    Par défaut
    merci c'est cool, j'ai mieux compris le fonctionnement des tailles des types.
    Cependant pour mon réseau c'est un peu tard :p je suis passé hier en soutenance, et finalement je n'ai pas présenté mon réseau. Je vais le recommencer de zéro à partir de la semaine prochaine.

    Merci pour ton aide AloneGhost

  6. #6
    Membre confirmé
    Inscrit en
    Avril 2005
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 115
    Par défaut
    Derien puisqu'elle n'as pas aboutit :S Bonne chance pour la suite!

Discussions similaires

  1. D7 envoi mail avec ICS
    Par Papy214 dans le forum Composants VCL
    Réponses: 2
    Dernier message: 13/10/2013, 21h51
  2. SendText, SendBuf, envoie de texte et de record / class
    Par Coussati dans le forum Web & réseau
    Réponses: 3
    Dernier message: 06/01/2011, 08h39
  3. Envoi de mail Html par ics
    Par LuckyLuke56 dans le forum Composants VCL
    Réponses: 0
    Dernier message: 26/09/2009, 18h26
  4. [IdTcpServer]Envoi d'objet ou record avec Stream
    Par davels dans le forum Web & réseau
    Réponses: 10
    Dernier message: 04/09/2007, 11h56
  5. Réponses: 4
    Dernier message: 10/12/2005, 20h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo