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

C# Discussion :

Ajouter un timeout lors de la connexion d'un socket


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Avatar de Spidermeu
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 147
    Par défaut Ajouter un timeout lors de la connexion d'un socket
    Bonjour,

    je souhaite checker le port d'un de mes serveurs s' il est ouvert ou non. Pour ca pas de soucis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Socket _socket = new Socket (AdressFamily.InterNetwork, SocketType.Stream,
             ProtocolType.Tcp);
    _socket.Connect (new IpEndPoint 
             (Dns.GetHostEntry("srv-preprod.masociété.net").AddressList[0], 45010));
    return _socket.Connected;
    Le problème c'est que le firewall en amont de mon serveur coupe l'accès au service à joindre à partir d'une certaine heure.
    Quand le firewall est bloquant, je voudrais éviter que l'application renvoit un résulter négatif ou bout de 10 secondes. Peut-on ajouter un timeout sur la méthode Connect ?

    il semblerait aussi que les méthodes BeginConnect et EndConnect pourraient m'être utile mais je ne comprend pas comment elle fonctionne (sysadmin de métier )...

    Merci

  2. #2
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Par défaut
    de mémoire, les beginxxx et endXXx (je mets xxx car il y en a d'autres),
    permettent de lancer l'action.. et le endxxx que tu définis dans l'appel du beginxxx sera appelé quand l'opération sera terminé

    En gros, begin et end permettent de faire de l'asynchrone sans lancer un thread
    explicitement

  3. #3
    Expert confirmé
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Par défaut
    Sauf que le EndXXX est bloquant ...
    Peut être qu'il faut justement créer un thread. Ainsi au bout de par exemple 10 secondes si la méthode (le thread) n'est toujours pas terminé on kill le thread avec un ZeThread.Abort();

  4. #4
    Membre confirmé
    Avatar de Spidermeu
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 147
    Par défaut
    Bonjour,
    merci pour vos reponses.
    Je vais essayer en partant vers un thread. Je dois juste regarder comment ca ce code.

    Finalement, le principe est de faire un thread qui executer mon connect et qui est alors "killer" au bout de x secondes, si celui-ci ne s'est pas encore terminé.

  5. #5
    Membre confirmé
    Avatar de Spidermeu
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 147
    Par défaut
    Je n'arrive malheureusement pas à ajouter un timeout sur le thread . Il y a bien des méthodes pour le mettre en attente, mais pas pour le killer si son délais d'exécution est trop élevé.

    En revanche, je trouvé une méthode TimeOut.Connect qui prend en paramètre un (IpEndPoint remoteEndPoint, int timeOutMSec), mais sans description. Je ne l'ai d'ailleurs pas trouvé sur msdn .

    Developpeur, merci d'avance

  6. #6
    Membre expérimenté
    Inscrit en
    Octobre 2007
    Messages
    236
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Octobre 2007
    Messages : 236
    Par défaut
    Essais ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
                int timeout = 2000; // Deux secondes
                TcpClient tcp = new TcpClient();
                IAsyncResult iar = tcp.BeginConnect(iphote, port, null, null);
                bool success = iar.AsyncWaitHandle.WaitOne(timeout, true);
                if (!success)
                {
                    tcp.Close();
                    // Traitement supplémentaire
                }
                // Succès
                tcp.EndConnect(iar);
                // Traitement supplémentaire
                tcp.Close();

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 13/12/2014, 03h52
  2. Timeout lors de la connexion au serveur MySQL
    Par dré kam dans le forum Administration
    Réponses: 0
    Dernier message: 08/07/2014, 13h47
  3. Echec lors de la connexion à la base de données.
    Par mclown dans le forum PostgreSQL
    Réponses: 8
    Dernier message: 26/10/2004, 23h36
  4. [JSP] erreur lors d'une connexion à mySQL
    Par Jovial dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 31/08/2004, 16h48
  5. Erreur lors de la connexion
    Par mathll65 dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 23/03/2004, 17h46

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