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: OnConnect puis plus rien ^o)


Sujet :

Web & réseau Delphi

  1. #1
    Membre actif
    Profil pro
    ----
    Inscrit en
    Mai 2004
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ----

    Informations forums :
    Inscription : Mai 2004
    Messages : 185
    Points : 245
    Points
    245
    Par défaut TClientSocket: OnConnect puis plus rien ^o)
    Quelqu'un pourait'il me dire pour quelle raison, dans le code suivant, plus rien ne se passe après le TClientSocket.OnConnect ?

    Merci infiniment.

    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
    program Project2;
     
    uses
      Forms,
      Windows,
      Messages,
      ScktComp,
      SysUtils;
     
    {$R *.res}
     
    type
      TEvents = class
      public
        S: TWinSocketStream;
        procedure OnRead(Sender: TObject; Socket: TCustomWinSocket);
        procedure OnWrite(Sender: TObject; Socket: TCustomWinSocket);
        procedure OnConnect(Sender: TObject; Socket: TCustomWinSocket);
        procedure OnError(Sender: TObject; Socket: TCustomWinSocket;
        ErrorEvent: TErrorEvent; var ErrorCode: Integer);
      end;
     
    var
      Msg : TMsg;
      Events : TEvents;
     
    {Debut Server}
     
    procedure TEvents.OnRead(Sender: TObject; Socket: TCustomWinSocket);
    begin
      Application.MessageBox(PAnsiChar(Socket.ReceiveText), 'Received', MB_OK);
    end;
     
    procedure TEvents.OnWrite(Sender: TObject; Socket: TCustomWinSocket);
    begin
      Application.MessageBox('^) ?', 'OnWriting', MB_OK);
    end;
     
    procedure TEvents.OnConnect(Sender: TObject; Socket: TCustomWinSocket);
    var
      L: Integer;
      S: TWinSocketStream;
    begin
      L := Socket.SendText('GET HTTP://www.google.fr/ HTTP/1.1' + #13#10 + #13#10);
      Application.MessageBox(PAnsiChar(IntToStr(L) + ' octet sended'), 'Connected', MB_OK);
    end;
     
    procedure TEvents.OnError(Sender: TObject; Socket: TCustomWinSocket;
        ErrorEvent: TErrorEvent; var ErrorCode: Integer);
    begin
      Application.MessageBox(PAnsiChar(IntToStr(ErrorCode)), 'Erreur !', MB_OK);
    end;
     
     
    var
      TCP: TClientSocket;
     
    begin
     
      try
     
    //    Application.Initialize;
    //    Application.MainFormOnTaskbar := False;
    //    Application.Run;
     
        TCP := TClientSocket.Create(nil);
        TCP.Host := 'www.google.fr';
        TCP.Port := 80;
        TCP.ClientType := ctBlocking; // ctNonBlocking;
        TCP.OnRead := Events.OnRead;
        TCP.OnWrite := Events.OnWrite;
        TCP.OnConnect := Events.OnConnect;
        TCP.OnError := Events.OnError;
        TCP.Open;
     
        While (GetMessage(Msg,Application.Handle,0,0)) Do DispatchMessage(Msg);
     
      finally
     
        TCP.free;
     
      end;
    end.
    Info:
    - J'utilise CodeGear Delphi 2007 sous Windows Vista
    - Si le TSocketClient et dans un Form tout va bien. Mais mon but et le threader sans avoir de fiche

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 675
    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 675
    Points : 25 487
    Points
    25 487
    Par défaut
    Normalement, en mode ctBlocking, il faut faut un thread car justement, il n'y pas plus de fonctionnement asynchrone par message (ce qui tu tentes d'utiliser dans ta boucle) et en plus tu n'utilise pas ton TWinSocketStream

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TEvents.OnConnect(Sender: TObject; Socket: TCustomWinSocket);
    begin
      ListThread.Add(TMySocketThread.Create(TWinSocketStream.Create(Socket, 1000));
    end;
    et dans le thread TMySocketThread, tu surcharges execute, et en boucle tu fais un Read\Write sur le stream ...

    utilise le mot ctNonBlocking et l'évèment OnRead, c'est bien plus pratique ... et pas besoin de boucle !

    bon ma réponse est approximative, je n'ai jamais fait de client threadé, je me suis toujours occupé du serveur ...

    Sinon en Delphi 2007, tu utilises encore le TSocketClient, il est déconseillé depuis D7, à remplacer par TTCPClient, ... ou par Indy, ou par ICS de Piette, ... moi avec TSocketServeur je n'ai eu aucun soucis et je peux dire que j'ai des programmes qui tourne depuis 5 ans sans soucis (je ne suis même plus dans la boite où je les ai fait, et perso chez eux ne sauraient s'en occuper) ... le débit étant d'environ 800Kb/s ... ce n'est pas énorme ... plein de petit paquet très rapprochés ... et cela avec 2 TSocketServeur avec 2 ports différents ... et posés sur la forme ...

Discussions similaires

  1. [XL-2010] Textbox masqué puis plus rien
    Par patmarti dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 07/03/2012, 23h58
  2. Demarre, puis plus rien!
    Par GYK dans le forum SUSE
    Réponses: 1
    Dernier message: 06/03/2008, 19h08
  3. Ma page marche un coup puis plus rien.
    Par peter27x dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 08/04/2007, 15h26
  4. Compilation et puis plus rien
    Par titor dans le forum GTK+ avec C & C++
    Réponses: 12
    Dernier message: 15/05/2006, 16h37
  5. [dbExpress]Select marche 1 fois, puis plus rien !
    Par qi130 dans le forum Bases de données
    Réponses: 7
    Dernier message: 08/12/2005, 23h13

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