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 :

Problème avec ScktComp, impossible d'envoyer du texte :(


Sujet :

Web & réseau Delphi

  1. #1
    Membre du Club
    Profil pro
    Lycéen
    Inscrit en
    Mai 2012
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2012
    Messages : 68
    Points : 47
    Points
    47
    Par défaut Problème avec ScktComp, impossible d'envoyer du texte :(
    Bonjour,
    J'ai un problème avec mon projet, ( http://hastebin.com/dofihaqewi.pas ), quand j'appel ma fonction "readlncmd", celle si désactive mon serveur, n'envoie pas 'test123', et je pense même bloque mon programme, si quelqu'un à une idée

    Merci d'avance

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 464
    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 464
    Points : 24 888
    Points
    24 888
    Par défaut
    Ton code me semble bien compliqué, tout le DPR, tout en procédural, pas un objet en vue (c'est ce qui rend la gestion des évènements lourd avec le TMethod)

    tu fais un SendText mais sans indiquer la connexion, soit utilise le paramètre Socket de socket_connected que tu passes à readlncmd, soit utilise ActiveConnections/Connections

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ServerSocket.Socket.Connections[x].SendText():
    x correspond à l'indice de connexion, 0 pour le premier connecté, vu ta structure actuel de code le paramètre Socket reste le plus simple

    Mon code dans le sujet Socket sans Form devrait te plaire !

    Voici une variante de ton code en Objet

    Simplifie ton DPR en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    program Project1;
     
    {$APPTYPE CONSOLE}
     
    {$R *.res}
     
    uses MonServeur;
     
    begin
      MonServeur.TServeur.Run();
    end;
    Ajoute une nouvelle unité que tu appelles MonServeur.pas

    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
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
     
    unit MonServeur;
     
    uses System.SysUtils,
      System.Win.ScktComp,
      Winapi.Windows; 
     
    type
      TServeur = class(TObject)
      private
        FServerSocket: TServerSocket;
     
        procedure socket_disconnected(Sender: TObject; Socket: TCustomWinSocket);
        procedure socket_read(Sender: TObject; Socket: TCustomWinSocket);
        procedure socket_error(Sender: TObject; Socket: TCustomWinSocket);
        procedure socket_listen(Sender: TObject; Socket: TCustomWinSocket);
     
        procedure readlncmd;
      public
        constructor Create();
        destructor Destroy(); override;
     
        property ServerSocket: TServerSocket;
      public
        class procedure Run();
      end;
     
    implementation 
     
    constructor TServeur.Create();
    begin
      inherited Create();
     
      FServerSocket := TServerSocket.Create(nil);
    end;
     
    destructor TServeur.Destroy();  
    begin
      FreeAndNil(FServerSocket);
     
      inherited Destroy();
    end;
     
    procedure TServeur.readlncmd(ASocket: TCustomWinSocket);
    begin
      writeln('test');    //S'affiche
      ASocket.SendText('test123');    
      writeln('test+');    // Devrait d'afficher
    end;
     
    procedure TServeur.socket_disconnected(Sender: TObject; Socket: TCustomWinSocket);
    begin
      Writeln('Client déconnecté');
    end;
     
    procedure TServeur.socket_read(Sender: TObject; Socket: TCustomWinSocket);
    begin
      Writeln(Socket.ReceiveText);
    end;
     
    procedure TServeur.socket_error(Sender: TObject; Socket: TCustomWinSocket);
    begin
      Writeln('erreur');
    end;
     
    procedure TServeur.socket_listen(Sender: TObject; Socket: TCustomWinSocket);
    begin
      Writeln('IP         |');
    end;
     
    procedure TServeur.socket_connected(Sender: TObject; Socket: TCustomWinSocket);
    begin
      Writeln(socket.RemoteAddress + '  |');
      Socket.SendText('Hello client');
      readlncmd(Socket);
    end;
     
    class procedure TServeur.Run();
    var
      WinMessage: TMsg;
    begin
      try
        with TServeur.Create() do
        try
          ServerSocket.Port:=1337;
     
          ServerSocket.OnClientConnect := socket_connected;
          ServerSocket.OnClientDisconnect := socket_disconnected;
          ServerSocket.OnClientRead := socket_read;
          ServerSocket.OnListen := socket_listen;
          ServerSocket.OnClientError := socket_error;
     
          ServerSocket.Active := True;
     
          while GetMessage(WinMessage, 0, 0, 0) do
          begin
            TranslateMessage(WinMessage);
            DispatchMessage(WinMessage);
          end;
        finally
          Free();
        end;
      except
        on E: Exception do
          Writeln(E.ClassName, ': ', E.Message);
      end;
    end;
    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

  3. #3
    Membre du Club
    Profil pro
    Lycéen
    Inscrit en
    Mai 2012
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2012
    Messages : 68
    Points : 47
    Points
    47
    Par défaut
    Merci beaucoup , tu serrais comment récupérer l'ID d'un client au moment de sa connexion ?
    Tout fonctionne comme il se doit

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 464
    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 464
    Points : 24 888
    Points
    24 888
    Par défaut
    Tu n'es pas obligé de citer la réponse, surtout lorsque l'on est que deux à échanger !
    J'ai répondu dans ton autre sujet ScktComp, récupérer l'ID d'un client
    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

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

Discussions similaires

  1. Problème avec la lecture d'un fichier texte
    Par Pentos60 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 31/01/2011, 15h27
  2. problème avec un petit logiciel editeur de texte
    Par audax068 dans le forum Outils
    Réponses: 3
    Dernier message: 26/04/2010, 11h34
  3. [HTML] Problème avec DIV, impossible de mettre la hauteur à 100% !!
    Par keyser.greg dans le forum Balisage (X)HTML et validation W3C
    Réponses: 14
    Dernier message: 01/03/2007, 11h46
  4. [phpMyAdmin] J'ai un problème avec phpMyAdmin : impossible de charger l'extension MySQLi
    Par Sanka76 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 24/01/2007, 13h48

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