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

Delphi Discussion :

Problème envoi de données entre TClientSocket et TServerSocket


Sujet :

Delphi

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 13
    Points : 11
    Points
    11
    Par défaut Problème envoi de données entre TClientSocket et TServerSocket
    Bonjour a tous,

    Je suis un debutant en Delphi , donc ma question ne doit pas être trop compliqué à resoudre , enfin je seche un peu lol .
    J'essai de créer un Server et un client en winsock. Les deux se connectent bien entre eux et j'arrive a envoyer des string (avec sendtext ) du server (TServerSocket) vers le client (TClientSocket). Mais impossible de faire l'inverse : c'est a dire du client vers le server. J'essais de le faire avec un Buffer avec les instruction si dessous pour le client :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ComputerName:='ordi a pierre';
    ClientSocket1.Socket.SendBuf(ComputerName,Length(ComputerName));
    Et les instructions dans la partie serveur (ServerSocket1ClientRead) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    taille:=Socket.ReceiveLength;
    Socket.ReceiveBuf(Buffer,taille);
    List_info.Items.Add(buffer);

    Le programme compile bien , mais des que j'essais de recevoir des données de la part du client vers le serveur j'ai un beau message d'erreur :
    Access Violation at adress ...


    Je n'ai peut etre pas compris comment fonctionne les buffers mais j'ai tout essayé et je en comprend pas , pouvez vous m'eclairez svp ?

    Merci d'avance

    Cordialement,
    Lucho

  2. #2
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 731
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 731
    Points : 15 134
    Points
    15 134
    Par défaut
    Access Violation at adress ...
    Dans la partie client ou dans la partie serveur ?
    --
    jp
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 13
    Points : 11
    Points
    11
    Par défaut
    c'est mon server qui plante , celui avec le TServerSocket
    si besoin je peut faire une capture d'ecran du message d'erreur du debugger

    merci de ta réponse

  4. #4
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 731
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 731
    Points : 15 134
    Points
    15 134
    Par défaut
    si besoin je peut faire une capture d'ecran...
    Pas nécessaire, par contre un bout de code de la partie concernée (un peu plus que ce que t'as mis), qu'on voie comment tu déclares et initialises tes variables...

    On n'est pas devin,
    --
    jp
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  5. #5
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2005
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 218
    Points : 311
    Points
    311
    Par défaut
    A tout hasard comme tu débutes, je suppose que List_Infos est une TList, tu n'aurais pas tout simplement oublier de la créer avant de faire le Add :
    List_Infos := TList.Create;

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 13
    Points : 11
    Points
    11
    Par défaut
    Bonsoir macumba,

    c'est vrai que les 3 lignes de code que je vous founis n'est pas trop explicite lol , le
    List_Infos est en faite un TlistView , que j'ai deja initialisé , j'ai d'ailleur deja ajouté des element dans celui-ci avant l'appel a la fonction. Donc je ne pense pas que cela viens de la ...

    j'ai beau cherché je n'arrive a rien , es-ce que un expert (lol) en Winsock peut il me dire si ma syntaxe d'envoie et juste ? parcque je ne sais pas trop si celle-ci est correct.


    Merci d'avance

  7. #7
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 731
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 731
    Points : 15 134
    Points
    15 134
    Par défaut
    List_Infos est en faite un TlistView
    Essaye donc avec un TMemo, histoire de lever le doute.
    --
    jp
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  8. #8
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    J'aurais tendance à écrire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Socket.ReceiveBuf(@Buffer[1], taille);
    ou plus simplement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Buffer := Socket.ReceiveText;
    si tu ne prévois de n'envoyer que des chaines pascal, car j'utilise des strings, qui me sert de buffer pour des binaires recopiés dans des record (ça contient des #0 ...)
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 13
    Points : 11
    Points
    11
    Par défaut
    Pour le Tmemo , je vien de tester cela fait exactement la meme erreur donc je ne pense pas que cela vienne de la ,

    j'ai fait des recherche et je pense que cela vien peut etre du faite que j'ai mal definie mon buffer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
      Socket: TCustomWinSocket);
    var
    Buffer:string;
    taille :Integer;
     
    begin
      taille:=Socket.ReceiveLength;    // taille du buffer reçue ( en octets )
      Socket.ReceiveBuf(Buffer,taille);    // reception des données
      List_info.Items.Add(buffer);
    j'ai definie le buffer comme un string , et on ma dit l'on devait alloué un espace au buffer , etc , je n'ai aps trop compris , peut etre que mon erreur , de plus je vais essayé de voir avec la syntaxe que m'a apssé ShaiLeTroll pour voir si ça marche , mais a mon avi mone rreur vien du faite que je definie mal mon buffer ....


    merchi d'avance

  10. #10
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Bonjour,

    Il faut en réception definir Buffer comme un tableau de caractère de longueur fixe, recevoir dedans, puis transférer le contenu du buffer vers une string.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Var Buffer : array[0..1000] of char ;
         dest : string ;
    ...
    dest:='' ;
    for i:=0 to taille_recue-1 do dest:=dest+buffer[i] ;
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 13
    Points : 11
    Points
    11
    Par défaut
    que dire de plus a part un grand merci !!!!!

    cela marche parfaitement !


    Merci encore Graffito pour ta réponse qui merche parfaitement

    et merci a tous ceux qui m'ont aidé

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 09/05/2014, 11h38
  2. Problème lors de l'envoi de données entre servlet et JSP
    Par julia_m dans le forum Servlets/JSP
    Réponses: 44
    Dernier message: 23/08/2012, 12h10
  3. Réponses: 3
    Dernier message: 02/03/2009, 22h34
  4. Problème envoie de données sur le port Serie
    Par petiteso dans le forum C#
    Réponses: 6
    Dernier message: 06/12/2007, 13h33
  5. [C#] problème de type donnée entre Service Web
    Par Cédric B. dans le forum Services Web
    Réponses: 1
    Dernier message: 01/11/2007, 01h19

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