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

VB.NET Discussion :

socket TCP et temps d'attent pour une connexion?


Sujet :

VB.NET

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    559
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 559
    Par défaut socket TCP et temps d'attent pour une connexion?
    Bonjour,

    Je voudrais savoir si j'ai pu me connecter sans avoir dépassé un certain temps.
    J'ai essayé ça mais ça ne fonctionne pas comme voulu:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     client = New TcpClient()
                client.Client.ReceiveTimeout = 100
     
                If client.Client.ReceiveTimeout = 100 Then
     
                    client.Connect(s_Adresse_IP, i_port_ip)
    end if
    Merci d'avance.

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 201
    Par défaut
    avec la méthode aynchrone surement (beginconnect)

    les méthodes aynchrones démarrent un thread et appellent un callback fourni (méthode de retour, un peu comme un évènement) une fois l'action faite
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    559
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 559
    Par défaut
    ok et comment on fait pour ne ne pas dépasser un certain temps

  4. #4
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 201
    Par défaut
    ne rien faire dans le callback si le callback est appelé après le temps que tu désires en timeout
    enfin je pense car normalement il faut appeler endconnect dans le callback
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    559
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 559
    Par défaut
    je ne vois pas du tout comment faire!

    J'ai trouvé ça sur ce site mais il n'y a pas d'exemple.


    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
    Lancement de l'attente asynchrone 
    Me.SocketServer.BeginAccept(AddressOf ConnectionAcceptCallback, Me.SocketServer) 
     
    Le deuxième argument sera passé à la fonction connexionCallback, lorsque celle ci sera appelée, à travers la propriété AsyncState de IAsyncResult. Le premier argument est un objet de type AsyncCallback. AsyncCallback est un délégué, qui est le terme en .NET pour désigner un pointeur de fonction. Le constructeur prend comme argument une fonction ayant cette signature : 
    Sub connexionCallback(Dim asyncResult As IAsyncResult) 
     
    Retenez bien cette signature car elle servira pour toutes les fonctions de rappel des autres fonctions asynchrones. La fonction connexionCallback s'exécute dans un Thread séparé de celui de l'application principale (thread lancé par le système). Cette fonction prend comme argument un type IAsyncResult. L'interface IAsyncResult nous permet de retrouver l'objet que nous avons passé à la fonction BeginAccept tel qu'il était à travers sa propriété AsyncState. 
    object asyncResult.AsyncState 
     
     
     
    2. Mettre fin à l'attente
    Pour finir l'attente d'une connexion et pour finir d'accepter la connexion d'un client vous devez appeler la fonction EndAccept. 
    Fonction de rappel pour la connexion d'un client 
    Private Sub connexionAcceptCallback(ByVal asyncResult As IAsyncResult)
    	SocketClient = SocketServer.EndAccept(asyncResult)
    End Sub

  6. #6
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Italie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 271
    Par défaut
    Essai ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Dim tcp As TcpClient = New TcpClient
    Dim wh As System.Threading.WaitHandle = ar.AsyncWaitHandle
    Try 
        If Not ar.AsyncWaitHandle.WaitOne(TimeSpan.FromSeconds(5), false) Then
            tcp.Close
            Throw New TimeoutException
        End If
        tcp.EndConnect(ar)
    Finally
        wh.Close
    End Try

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    559
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 559
    Par défaut
    merci mais comment décalres tu "ar" de

  8. #8
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 201
    Par défaut
    ar est un paramètre de la méthode que tu dois créer et utiliser comme callback
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    559
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 559
    Par défaut
    c'est à dire?

  10. #10
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 201
    Par défaut
    c'est quoi que tu as pas compris ? paramètre ? méthode ? fournir le callback à beginconnect ?
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    559
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 559
    Par défaut
    callback

  12. #12
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Italie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 271
    Par défaut
    Désolé une ligne manquait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Dim client As TcpClient = New TcpClient
    Dim ar As IAsyncResult = client.BeginConnect(s_Adresse_IP, i_port_ip, null, null); 
    Dim wh As System.Threading.WaitHandle = ar.AsyncWaitHandle
    Try 
        If Not ar.AsyncWaitHandle.WaitOne(TimeSpan.FromSeconds(5), false) Then
            client.Close
            Throw New TimeoutException
        End If
        client.EndConnect(ar)
    Finally
        wh.Close
    End Try

  13. #13
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    559
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 559
    Par défaut
    je verrais demain si ça marche mais merci

  14. #14
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    559
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 559
    Par défaut
    j'ai une erreur, le compilateur dit que 'ar' n'est pas déclaré, je n'ai pas accès aux méthodes de 'ar'

  15. #15
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Italie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 271
    Par défaut
    Remplace la ligne 2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      Dim ar As IAsyncResult = client.BeginConnect(s_Adresse_IP, i_port_ip, Nothing, Nothing)

  16. #16
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    559
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 559
    Par défaut
    je comprends pas trop le code fourni mais je voudrais renvoyer un booleen et le mettre à false quand on dépasse un certain temps ou sinon le mettre à vrai si le temps est bon

    j'essaye le pas à pas pour voir où mon programme avec la connexion et sans mais j'ai une erreur avec 'ar'. Le compilateur me propose en premier de créer l'objet en utilisant le mot New

  17. #17
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2007
    Messages : 467
    Par défaut
    Pourquoi tu te prends la tête comme ça ?

    Si j'ai bien compris, tu voudrais qu'au delà d'un certain temps l'utilisateur soit averti, si ton serveur n'a pas répondu,

    Quand tu initialises ta *chaussette*, tu mets une valeur sur la propriété : "ReceiveTimeout"

    Quand ta *chaussette* va se connecter, si au bout de x Ms (définit par ReceiveTimeout), cela va te lever une exception. Exception à catcher avec un Try !

    Après je peux me fourvoyer complètement sur ton besoin.

  18. #18
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    559
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 559
    Par défaut
    il suffit d'initaliser le ReceiveTimeout

    mais pour gérer son try, catch associé, il faut faire comment?

  19. #19
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 201
    Par défaut
    Citation Envoyé par Luc1an0 Voir le message
    Pourquoi tu te prends la tête comme ça ?

    Si j'ai bien compris, tu voudrais qu'au delà d'un certain temps l'utilisateur soit averti, si ton serveur n'a pas répondu,

    Quand tu initialises ta *chaussette*, tu mets une valeur sur la propriété : "ReceiveTimeout"

    Quand ta *chaussette* va se connecter, si au bout de x Ms (définit par ReceiveTimeout), cela va te lever une exception. Exception à catcher avec un Try !

    Après je peux me fourvoyer complètement sur ton besoin.

    le receiveTimeout il a essayer, et il ne doit servir que pour la réception (il y a aussi sendTimeout)
    et il n'y a pas de propriété connectionTimeout
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  20. #20
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    559
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 559
    Par défaut
    i doit bien y avoir une méthode indiquant si une liaison socket est possible

Discussions similaires

  1. [Débutant] Problème de temps de réponse pour une recherche d'articles
    Par Tazze-99 dans le forum VB.NET
    Réponses: 22
    Dernier message: 14/12/2011, 10h50
  2. Réponses: 0
    Dernier message: 19/07/2011, 16h50
  3. Temps d'exécution pour une procédure stockée PL/SQL Oracle 9
    Par strompakha dans le forum Administration
    Réponses: 3
    Dernier message: 18/05/2010, 14h09
  4. Réponses: 2
    Dernier message: 28/04/2009, 15h26
  5. Réponses: 20
    Dernier message: 10/07/2006, 16h53

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