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 :

Client tcp non bloquant


Sujet :

Web & réseau Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté Avatar de franckcl
    Homme Profil pro
    Developpeur Delphi
    Inscrit en
    Septembre 2004
    Messages
    516
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Developpeur Delphi
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2004
    Messages : 516
    Par défaut Client tcp non bloquant
    Bonjour à tous,

    Je suis sous Delphi XE2.
    J'ai parcouru internet dans tous les sens et je ne trouve pas de solution viable pour créer un client tcp non bloquant. Dans mon dernier essai, j'utilisais le composant TcpClient. Le problème se pose lorsque l'adresse ip du host ne répond pas. La fonction Open est bloquante et en sort seulement après un long timeout de 21 secondes.
    J'ai essayé de créer un Thread et d’appeler la fonction "open" depuis le thread mais lorsque je quitte l'application et qu'une connexion tcp est en cours, le processus reste en mémoire tant que la connexions n'est pas terminée.
    J'ai essayé aussi de passer la propriété Blockmode à bmNonBlocking mais des que j'essaie de me connecter elle renvoie le code d'erreur 10035.
    Cette propriété n'est pas documentée et je n'arrive pas à trouver d'info sur le net.
    Si quelqu'un a une solution ....
    Merci
    Franck

  2. #2
    Expert confirmé

    Avatar de Nono40
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2002
    Messages
    8 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2002
    Messages : 8 640
    Par défaut
    Avec Delphi 2010 je me suis tellement fait suer à essayer de faire fonctionner TcpClient que j'ai installé le paquet (fourni mais non installé) pour avoir TClientSocket et TServerSocket.

    Sous XE2 le paquet existe aussi : dclsockets160.bpl
    Composants->Installer des packages puis ajoute le paquet ci-dessus.
    Delphi :
    La F.A.Q. , 877 réponses à vos questions !
    264 sources à consulter/télécharger !

  3. #3
    Membre Expert Avatar de philnext
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 553
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 553
    Par défaut
    Essaye les composants ICS, ils fonctionnent avec des events => non bloquant.

  4. #4
    Membre expérimenté Avatar de franckcl
    Homme Profil pro
    Developpeur Delphi
    Inscrit en
    Septembre 2004
    Messages
    516
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Developpeur Delphi
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2004
    Messages : 516
    Par défaut
    Je pense que je vais m'orienter vers le composant idTcpClient qui permet de "régler" le timeout de connexion.

    Mais j'aimerais bien comprendre comment fonctionne TcpClient lorsque la propriété Blockmode est à bmNonBlocking !!!

  5. #5
    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
    pour avoir pas mal essayé les composants client / serveur, je conseil comme nono : TClientSocket et TServerSocket

    ceux de indy m'ont rendu fou par moment :/

  6. #6
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    Citation Envoyé par franckcl Voir le message
    Je pense que je vais m'orienter vers le composant idTcpClient qui permet de "régler" le timeout de connexion.

    Mais j'aimerais bien comprendre comment fonctionne TcpClient lorsque la propriété Blockmode est à bmNonBlocking !!!
    en fait TcpClient utilise ioctlsocket pour basculer le socket en mode non bloquant sans passer par WSAASyncSelect. En théorie, Open devrait déclencher une erreur WSAEWOULDBLOCK pour indiquer que l'appel ne peut aboutir pour l'instant.

    voir ms-help://embarcadero.rs_xe2/WinSock/winsock/connect_2.htm

    Je n'ai jamais testé ce mode, sous Windows WSAASyncSelect est plus simple d'usage avec le message de notification FD_CONNECT. C'est ce qu'utilise ICS si mon souvenir est bon.

    EDIT: en tout cas tu n'es pas le seul
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  7. #7
    Membre expérimenté Avatar de franckcl
    Homme Profil pro
    Developpeur Delphi
    Inscrit en
    Septembre 2004
    Messages
    516
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Developpeur Delphi
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2004
    Messages : 516
    Par défaut [RESOLU] Client tcp non bloquant
    Merci à tous,
    Donc c'est fait j'utilise idTCPClient mais dans un TThread ce qui le rend non bloquant vue de l'application. Je rendrai paramétrable le timeout de connexion dans mon appli.
    Franck

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

Discussions similaires

  1. Connect non bloquant en TCP
    Par xilebo dans le forum Réseau
    Réponses: 1
    Dernier message: 14/05/2012, 10h18
  2. Problème TCP non bloquant sous Linux (C++)
    Par jmelyn dans le forum Linux
    Réponses: 4
    Dernier message: 15/11/2007, 14h27
  3. Création version client - fichiers non trouvés
    Par Pascal dans le forum WinDev
    Réponses: 7
    Dernier message: 03/12/2004, 11h34
  4. Réponses: 3
    Dernier message: 16/03/2004, 16h42
  5. [API] Communication série NON-bloquante : OVERLAPPED/Thread
    Par Rodrigue dans le forum C++Builder
    Réponses: 2
    Dernier message: 07/11/2003, 13h43

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