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 :

[TClientSocket] Dialogue client/serveur Delphi 6


Sujet :

Web & réseau Delphi

  1. #1
    Futur Membre du Club
    Inscrit en
    Mars 2004
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 11
    Points : 9
    Points
    9
    Par défaut [TClientSocket] Dialogue client/serveur Delphi 6
    Bonjour

    je me suis aperçu d'une chose que je trouve étrange. J'essaie simplement d'envoyer un texte à un serveur.

    Je me suis aperçu que mon texte n'arrive pas dans ce cas là (rien n'est transmit) :
    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
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      if (not ClientSocket1.Active) then
      begin
        ClientSocket1.Host := l'ip d'un serveur...; 
        ClientSocket1.Port := le port du serveur...;
        ClientSocket1.Active := True;
        button2.Click;
      end;
    end;
     
    procedure TForm1.Button2Click(Sender: TObject);
    begin
      ClientSocket1.Socket.SendText('mon texte');
    end;
    Par contre tout va bien dans ce cas là, le texte est transmit mais je dois cliquer sur le bouton pour envoyer le message :

    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
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      if (not ClientSocket1.Active) then
      begin
        ClientSocket1.Host := IpHost;
        ClientSocket1.Port := PortHost;
        ClientSocket1.Active := True;
      end;
    end;
     
    procedure TForm1.Button2Click(Sender: TObject);
    begin
      ClientSocket1.Socket.SendText('mon texte');
    end;
    Quelqu'un peut m'expliquer ?

    Je précise que j'ai essayé de faire un sleep (bloquant) et meme un autre type de sleep (non bloquant) mais rien à faire : dans le prmeier cas, aucun message n'est envoyé.


  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    685
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 685
    Points : 1 608
    Points
    1 608
    Par défaut
    Je n'ai pas beaucoup utilisé les clientsockets, mais n'est-il pas nécessaire de toujours ajouter un retour à la ligne pour la commande soit émise ? Du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ClientSocket1.Socket.SendText('mon texte'#13#10);
    "It's more fun to compute !"

  3. #3
    Futur Membre du Club
    Inscrit en
    Mars 2004
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 11
    Points : 9
    Points
    9
    Par défaut
    Dans le second cas, il n'y a pas de retour à la ligne et celà marche.

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    685
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 685
    Points : 1 608
    Points
    1 608
    Par défaut
    Peux tu afficher le résultat renvoyé par SendText dans un ShowMessage et poster la valeur renvoyée dans les deux cas ?

    <edit>La question précédente venait du fait que je ne sais pas comment les clientsockets gèrent les envois. Ils peuvent par exemple passer par un buffer qui n'est envoyé une fois qu'une taille particulière est atteinte, alors qu'un retour chariot peut vider ce buffer et par conséquent écrire les données immédiatement sur le flux de connexion</edit>
    "It's more fun to compute !"

  5. #5
    Futur Membre du Club
    Inscrit en
    Mars 2004
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 11
    Points : 9
    Points
    9
    Par défaut
    Dans le premier cas, la trame contenant le message n'est pas envoyée tout simplement et sendtext retourne 0.

    Dans le deuxième cas, le message est parfaitement envoyé et sendtext retourne le nombre d'octet envoyé (qui correspond bien à mon message).

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 15
    Points : 16
    Points
    16
    Par défaut
    Salut ...

    pour envoyer un message au serveur il est mieu de le faire sur le Onconnect tu es alors certain que le socket est bien ouvert.



    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
     
    procedure TForm1.Button1Click(Sender: TObject); 
    begin 
      if (not ClientSocket1.Active) then 
      begin 
        ClientSocket1.OnConnect := Clientsocket1connect;
        ClientSocket1.Host := l'ip d'un serveur...; 
        ClientSocket1.Port := le port du serveur...; 
        ClientSocket1.Active := True; 
      end; 
    end; 
     
    procedure TForm1.ClientSocketConnect1(Sender: TObject;
      Socket: TCustomWinSocket);
    begin
        MonSocket := Socket ; // a déclarer qq part dans l'objet Tform1 ;) 
        Socket.SendText('mon texte'); 
    end;
     
    // tu peux garder l'envoi sur le onclic aussi si util :)
    // mais controles avant s'il est connecté
     
    procedure TForm1.Button2Click(Sender: TObject); 
    begin 
      If MonSocket = Nil then exit; 
      if MonSocket.connected then 
      MonSocket.SendText('mon texte'); 
    end;

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 38
    Points : 25
    Points
    25
    Par défaut récupérer adresse client
    Bonjour à tous ,
    je voulais savoir s'il était possible de récupérer l'adresse IP du client à partir du serveur.
    Merci pour votre aide

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 29/08/2009, 00h35
  2. client serveur delphi
    Par kroma23 dans le forum Delphi
    Réponses: 1
    Dernier message: 20/06/2007, 17h05
  3. grammaire de dialogue client serveur
    Par aaronw dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 19/02/2006, 23h30
  4. Méthode de dialogue client/serveur
    Par MisterFreeze dans le forum C++
    Réponses: 3
    Dernier message: 06/01/2006, 22h31
  5. [Reseau] Dialogue client-serveur
    Par Nasky dans le forum Entrée/Sortie
    Réponses: 11
    Dernier message: 08/08/2005, 15h07

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