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 :

[Client - Server] Comment envoyer beaucoup d'items d'un seul coup ?


Sujet :

Web & réseau Delphi

  1. #1
    Débutant
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    893
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 893
    Points : 330
    Points
    330
    Par défaut [Client - Server] Comment envoyer beaucoup d'items d'un seul coup ?
    salut

    jaimerais envoyer à mon server les items se trouvant dans la listbox1 de mon client

    je n'ai pas de problème lorsqu'il n'y a pas beaucoup d'item, mais lorsqu'on monte à 2000 par exemple et bien le server ne reçoit pas tout les item et parfois beug

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ClientSocket1.Socket.SendText(listbox1.Items.Text);
    à mon avis c'est parce que la taille est trop grande

    j'aurais préféré tout transféré d'un seul coup, mais je pense que si c'est un prob de taille, ce sera pas possible

    donc j'ai pensé à ceci : enregistrer les item dans une variable string par exemple : item1|item2|item3 .... (| pour séparer et biensur à la réception le server devra gérer les item en enlevant les |)

    mais je ne sais pas si ça fonctionnera donc je me remet à vous

    j'ai essayé plusieurs méthodes et depuis plusieurs mois (à chaque fois je me démotive et j'abandonne)

    en local ça fonctionne très bien lorsque j'envois les items 200 par 200 par ex, mais une fois que je teste avec un amis sur le net et bien il y a le même probleme :s

    ya t il un moyen avec les stream ou autre ?

    merci

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2003
    Messages : 38
    Points : 43
    Points
    43
    Par défaut
    les envoyer a "petite dose" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    for i:=0 to ItemsCount-1 do
      ClientSocket1.Socket.SendText(Items[i]);

  3. #3
    Débutant
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    893
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 893
    Points : 330
    Points
    330
    Par défaut
    j'ai déjà essayé, avec 2000 items imagine le temps que ça prendra ...

    c'est pourquoi il me faut un moyen d'envoyer plusieurs en même temps
    et encore ... j'ai déjà réussis en envoyant par 200 mais ça ne fonctionne qu'en local ! c'est pkoi je me demande s'il n'existe pas un autre moyen avec les steam ou autres ...

  4. #4
    Débutant
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    893
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 893
    Points : 330
    Points
    330
    Par défaut
    personne ?

  5. #5
    Membre éclairé Avatar de slimjoe
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2005
    Messages : 647
    Points : 789
    Points
    789
    Par défaut
    Salut !

    Quelle est la longueur totale (en nombre de caractères) de tes 2000 items ?

    Si tu es certain que c'est la longueur qui est le problème, tu pourrais peut-être compresser la chaîne (via la librarie zLib), la transmettre et la décompresser une fois rendue.

    Remarque que je trouve ça un peu bizarre compte tenu que certaines page web son très volumineuses et se téléchargent quand même en entier malgré leurs tailles.... M'enfin....

  6. #6
    Membre éclairé Avatar de slimjoe
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2005
    Messages : 647
    Points : 789
    Points
    789
    Par défaut
    Re-Salut!

    Et pourquoi est-ce que l'application cliente ne demande pas à l'application serveur de lui retransmettre les lignes qui manquent ? (ou l'inverse si tu pousse des donées d'une appli cliente vers un serveur)

  7. #7
    Membre éclairé Avatar de slimjoe
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2005
    Messages : 647
    Points : 789
    Points
    789
    Par défaut
    Re-Re-Salut !!

    As-tu essayé le composant INDY TIdTCPClient ?

  8. #8
    Débutant
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    893
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 893
    Points : 330
    Points
    330
    Par défaut
    salut

    tout d'abord je tiens à te remercier pour tes réponses

    - la taille des 2000 items varie vu que les items ne sont pas les même

    - peux tu me donner plus de renseignement sur la librarie zLib stp ? si tu connais des sources ? (je vais faire une recherche now mais je demande quand même )
    je ne suis pas sur que c'est la bonne méthode mais si ça fait pas trop lourd je pourrais l'utiliser, mais en même temps il faudrait qu'une fois compressé, la taille est vraiment réduite (imagine que pour 2000 item ça passe et pour 2050 item c le même prob)

    - non je n'ai pas utiliser INDY TIdTCPClient tout simplement par ce que je connais et je préfère Tclient / Tsocket server et pour les inovations je préfère garder ça

    merci encore

  9. #9
    Membre éclairé Avatar de slimjoe
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2005
    Messages : 647
    Points : 789
    Points
    789
    Par défaut
    Salut!

    Désolé, le seul exemple d'utilisation de zLib que je garde est pour la compression de fichiers (source: http://www.swissdelphicenter.ch/torr...de.php?id=1617).

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
     
    uses
      Zlib;
     
    procedure CompressFiles(Files : TStrings; const Filename : String);
    var
      infile, outfile, tmpFile : TFileStream;
      compr : TCompressionStream;
      i,l : Integer;
      s : String;
     
    begin
      if Files.Count > 0 then
      begin
        outFile := TFileStream.Create(Filename,fmCreate);
        try
          { the number of files }
          l := Files.Count;
          outfile.Write(l,SizeOf(l));
          for i := 0 to Files.Count-1 do
          begin
            infile := TFileStream.Create(Files[i],fmOpenRead);
            try
              { the original filename }
              s := ExtractFilename(Files[i]);
              l := Length(s);
              outfile.Write(l,SizeOf(l));
              outfile.Write(s[1],l);
              { the original filesize }
              l := infile.Size;
              outfile.Write(l,SizeOf(l));
              { compress and store the file temporary}
              tmpFile := TFileStream.Create('tmp',fmCreate);
              compr := TCompressionStream.Create(clMax,tmpfile);
              try
                compr.CopyFrom(infile,l);
              finally
                compr.Free;
                tmpFile.Free;
              end;
              { append the compressed file to the destination file }
              tmpFile := TFileStream.Create('tmp',fmOpenRead);
              try
                outfile.CopyFrom(tmpFile,0);
              finally
                tmpFile.Free;
              end;
            finally
              infile.Free;
            end;
          end;
        finally
          outfile.Free;
        end;
        DeleteFile('tmp');
      end;
    end;
     
    procedure DecompressFiles(const Filename, DestDirectory : String);
    var
      dest,s : String;
      decompr : TDecompressionStream;
      infile, outfile : TFilestream;
      i,l,c : Integer;
    begin
      // IncludeTrailingPathDelimiter (D6/D7 only)
      dest := IncludeTrailingPathDelimiter(DestDirectory);
     
      infile := TFileStream.Create(Filename,fmOpenRead);
      try
        { number of files }
        infile.Read(c,SizeOf(c));
        for i := 1 to c do
        begin
          { read filename }
          infile.Read(l,SizeOf(l));
          SetLength(s,l);
          infile.Read(s[1],l);
          { read filesize }
          infile.Read(l,SizeOf(l));
          { decompress the files and store it }
          s := dest+s; //include the path
          outfile := TFileStream.Create(s,fmCreate);
          decompr := TDecompressionStream.Create(infile);
          try
            outfile.CopyFrom(decompr,l);
          finally
            outfile.Free;
            decompr.Free;
          end;
        end;
      finally
        infile.Free;
      end;
    end;
    Toutefois, je suis certain que tu pourras l'adapter pour compresser une chaîne (en remplaçant le TFileStream par un TStringStream par exemple).

    je ne suis pas sur que c'est la bonne méthode
    En fait, moi non plus mais de compresser tes données devrait non seulement aider à faire fonctionner ton projet mais va définitivement accélérer le transfert.

    mais si ça fait pas trop lourd je pourrais l'utiliser, mais en même temps il faudrait qu'une fois compressé, la taille est vraiment réduite (imagine que pour 2000 item ça passe et pour 2050 item c le même prob)
    La librairie zLib permet de compresser avec un taux d'efficacité qui ressemble à ce que fait WinZip. À mon avis, si c'est du texte brut que tu envoies, tu devrais t'attendre à une compression de 80-90%.

    non je n'ai pas utiliser INDY TIdTCPClient tout simplement par ce que je connais et je préfère Tclient / Tsocket server et pour les inovations je préfère garder ça
    J'ai mentionné TIdTCPClient tout simplement parce qu'il offre des propriétés (telles que SendBufferSize) que tu pourrais ajuster.


    Remarque que je continue à trouver bizarre que certaines parties de ta chaîne ne se rende tout simplement pas à ton serveur... Normalement, ton objet Socket devrait te donner des erreurs s'il n'est pas capable de transmettre certains octets pour une raison ou une autre...

  10. #10
    Débutant
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    893
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 893
    Points : 330
    Points
    330
    Par défaut
    thx je verrai totu ça

    sinon le compo que j'utilise utilise SendBufferSize pour envoyer des fichiers il me semble

Discussions similaires

  1. [WD-2010] Bloc notes - supprimer beaucoup de lignes d'un seul coup
    Par ruliann dans le forum Word
    Réponses: 3
    Dernier message: 09/09/2014, 23h42
  2. [Team Foundation Server] Comment ajouter des Items ?
    Par Dadou74 dans le forum EDI/Outils
    Réponses: 1
    Dernier message: 27/07/2006, 16h36
  3. Réponses: 2
    Dernier message: 22/06/2006, 13h09
  4. Comment envoyer sur un server?
    Par cocot dans le forum Web & réseau
    Réponses: 1
    Dernier message: 01/05/2006, 19h56
  5. Serveur/Client UDP: comment envoyer un fichier avec mon code
    Par danje dans le forum Entrée/Sortie
    Réponses: 7
    Dernier message: 21/12/2005, 15h54

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