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 :

SendText, SendBuf, envoie de texte et de record / class


Sujet :

Web & réseau Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    893
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 893
    Par défaut SendText, SendBuf, envoie de texte et de record / class
    bonjour

    depuis que j'utilise les socket, j'envoie que du texte (string, contenu de memo, listbox, ect)

    j'aimerais quelques précisions pour optimiser mon application

    j'aurai toujours du texte à transférer mais aussi des type record et / ou des class

    je n'ai pas vraiment trouver de documentation détaillé sur la différence de ces 2 procédures et leur utilisation, donc j'aimerais avoir un peu d'infos svp

    savoir aussi si on peut utiliser les 2 même temps, ou s'il y a mésentente

    j'ai fais quelques testes, et j'ai l'impression qu'on doit choisir l'un ou l'autre

    aussi j'ai remarqué qu'avec sendbuf on peut envoyer du texte mais sous forme de tableau (parfois je ne connais pas la longueur du texte, donc comment déclarer son tableau ?)

    merci de bien vouloir m'éclairer sur ce sujet

  2. #2
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    un socket ce n'est qu'un tuyau...tu peux envoyer et recevoir dedans de la même façon que écrit et lit dans un fichier (sans le Seek)

    donc envoyer un record, ok s'il est de taille fixe, envoyer une classe, uniquement si elle est sérialisée.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

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

    Informations forums :
    Inscription : Juillet 2003
    Messages : 893
    Par défaut
    merci pour ta réponse PAUL, mais peux tu être plus précis stp ? je sais que tu as pas mal travaillé sur les socket, et il me semble que tu les utilises en PUR winsock, mais moi qui utilisais que "sendtext" je suis un peu perdu

    pourquoi je parle de faire coïncider les 2 ? car dans le teste que j'ai fais, lorsque j'envoie avec sendbuff, le serveur.receivetext se déclenche et affiche de mauvais caractère

    après pour l'envoie de record ? je déduis qu'il faut utiliser sendbuff ? et pour la taille en octet de ce qu'on envoie ?

    j'utilisais un compo socket autrefois, qui plantait lorsque les données transféré dépassais les 1ko

  4. #4
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    alors au plus bas niveau tu as en effet send() et recv(), selon le composant que tu utilises il va utiliser cela directement ou pas (mise ne cache).

    SendText à priori envoie des strings, mais les strings Delphi peuvent contenir n'importe quoi (y compris le caractère 0)...attention cependant aux version 2009+ qui passent en unicode (cf RawByteString)

    SendBuff doit à priori envoyer un paquet de données comme BlockWrite sur un fichier. mais pour cela il faut que ton record ne contienne aucun pointeur au sens large, donc pas de tableau dynamique, pas de (long)string etc...

    SendBuff(MonRec, SizeOf(MonRec))

    ensuite, vérifie une chose, send() et recv() peuvent ne traiter qu'une partie des données, il faut généralement boucler dessus pour traiter tout le buffer

    maintenant si ton receivetext ne correspond pas au sendbuff tu utilises peut-être mal le sendbuff ( attention aux "paramètre var" "@" et "^" )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    repeat
     i := send(buffer[x], len - x, 0);
     Inc(x, i);
    until (i <= 0) or (x = len);
    si SendBuff réagit de la même façon tu dois boucler dessus, s'il le fait déjà c'est pas la peine.

    idem en lecture, si tu demandes 20 octets et qu'il y en a 10 dans le tuyau il faut boucle en lecture jusqu'à avoir lu les 20
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

Discussions similaires

  1. Charger un fichier text dans un record
    Par miomikio dans le forum Ada
    Réponses: 2
    Dernier message: 19/05/2007, 21h13
  2. JTextField, envoie du text a une base de données.
    Par niklette dans le forum Composants
    Réponses: 2
    Dernier message: 05/06/2006, 20h23
  3. Réponses: 21
    Dernier message: 01/03/2006, 16h51
  4. Problème d'envoie de text avec les sockets
    Par Coussati dans le forum Web & réseau
    Réponses: 6
    Dernier message: 16/09/2005, 10h26
  5. [Socket] Envoi de texte et d'objets par socket
    Par ced dans le forum Entrée/Sortie
    Réponses: 7
    Dernier message: 05/08/2004, 09h07

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