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 :

Déconnecter un utilisateur indésirable


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 Déconnecter un utilisateur indésirable
    bonjour

    cette question ne s'applique pas à un composant bien précis, mais aux composants client - server tcp ip en général, car c'est le même principe logiquement

    pour exemple nous pouvons prendre les compo fournit dans delphi 7 Tclientsocket et Tserversocket

    dans mon application, le server acceptera maximum 10 clients

    tout fonctionnait parfaitement jusqu'à ce que je détecte une "faille" : le serveur est en écoute sur un port, si d'autres clients extérieur (client ftp ou autre) connaissent le port (en cas d'une application public par exemple) ils pourront s'y connecter

    même s'ils ne pourront pas répondre aux différents "messages" qu'envoie le server, ils prendront une place inutilement

    avez vous une idée ? pour soit niveau composant mettre une sorte de clé / chiffrement et déconnecter dans le "on accept" par exemple ?

  2. #2
    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
    je ne trouve aucune solution, vous êtes ma dernière chance

    si je me suis mal exprimé ou que vous n'avez pas compris mon problème je peux vous expliquer autrement ...

    parce qu'on dirait qu'il n'y a pas de solution

  3. #3
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    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 : 14 094
    Par défaut
    Dans le OnAccept, tu ne peux pas échanger grand chose, en HTTPS par exemple, la connexion TCP\IP est effectué, ensuite l'échange de clés se produit, puis la "connexion" HTTP est faite (du moins la séquence POST->REPONSE)

    Dans ton cas, une fois le client ouvert, tu lui envoie un message propre à ton application, le client doit répondre par un autre message, si tu ne reçois pas le message adéquat, tu fermes la connexion ... un simple Socket.Close !

    Utilise un tableau Handle\Etat pour avoir l'état des lieux des connectés ... si un connecté reste pendant plus de 5secondes sans passer de Connecté à Identifié, tu le kick ...

    Le Serveur n'envoie de données réelles qu'une fois le client identifié !

    C'est ce que je faisais en général ... dans un projet, j'avais plusieurs programmes, une fois connecté sur le serveur, je demandais au programme qui il était (j'avais P1, P2, P2B, P3, P4, P5 et P6, AD1, AD2) et je devais envoyer à chacun différents messages en fonction d'évènement d'un automate et des actions sur l'un ou l'autre des programmes aussi ensuite le serveur se chargeait de dispatcher aux bons destinataires ...

    Perso, j'utilisais OnRead en mode bloquant, mais je ne traitais pas le message, je ne faisais que le stocker dans un buffer, et c'est un thread qui se chargeait du parsage, analyse du message, préparation de la réponse, puis un autre thread se chargeait du KeepAlive, Envoie des Données ou du Kick ...
    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

  4. #4
    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

    j'avais pensé à faire quelque chose dans ce genre, mais je suis obligé de mettre en place un timer, et pour moi c'était compliquer la situation :/

  5. #5
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    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 : 14 094
    Par défaut
    C'est parce que tu traites tes messages dès leur reception ... passant toujours par un Thread et une FIFO (au final les performances sont meilleures et cela évite les problèmes de bufferisation des données TCP\IP) !

    Effectivement, le plus simple dans ton cas, c'est un Timer, ...
    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

  6. #6
    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 ton aide

    j'essaierai de mettre en place le système et si j'ai un soucis je reviens poster

Discussions similaires

  1. Comment faire déconnecter les utilisateurs d'une base
    Par ENIT-Info dans le forum Access
    Réponses: 23
    Dernier message: 28/02/2017, 14h57
  2. Déconnecter un Utilisateur Indésirable.
    Par Tofuto dans le forum ActionScript 3
    Réponses: 0
    Dernier message: 06/07/2010, 17h58
  3. Réponses: 3
    Dernier message: 02/04/2007, 17h05
  4. déconnecter un utilisateur
    Par soad dans le forum Oracle
    Réponses: 7
    Dernier message: 26/09/2006, 11h34
  5. [SQL-SERVER] "Déconnecter" les utilisateurs d'une
    Par Sytchev3 dans le forum MS SQL Server
    Réponses: 13
    Dernier message: 18/07/2006, 11h30

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