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 6 et antérieur Discussion :

petit probleme client/serveur


Sujet :

VB 6 et antérieur

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    140
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Mars 2008
    Messages : 140
    Points : 147
    Points
    147
    Par défaut petit probleme client/serveur
    bonjour a tous je vous explique mon problème :
    j'ai une application serveur qui gère la multiconnection (pour avoir plusieurs client connecté en même temps)
    voici le code pour accepter une connection :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub tcpServer_ConnectionRequest(ByVal requestID As Long)
        nb = nb + 1
        Load Wsck(nb)
        Wsck(nb).Accept requestID
        Wsck(nb).SendData ("F" & "Bonjour" & "<FIN>")
        DoEvents
    End sub
    jusque la pas de problème. Maintenant je voudrai pouvoir envoyer un message a tous mes clients connectés pour cela j ai pensé a une boucle for each que j'ai réalisé comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim W as Winsock
    For Each W In Wsck
            W.SendData ("V" & "blablabla" & "<FIN>")
            DoEvents
    Next W
    quand je lance mon application j'ai une erreur 40006. J'aimerai avoir un peu d'aide pour réussir à résoudre ce problème. Merci d'avance à tous

  2. #2
    Membre expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Points : 3 696
    Points
    3 696
    Par défaut
    Que se passe t'il quand un client ferme la connection ? , le winsock est toujours la, ou il a été déchargé ?
    Parce qu'il est difficile de faire un senddata sur un winsock dont la connection a été fermée

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    140
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Mars 2008
    Messages : 140
    Points : 147
    Points
    147
    Par défaut
    pour ceux qui ce sont un peu penché sur mon problème je viens de découvrir quelque chose si ca peut vous aider pour me dire d ou vient mon soucis. En fait après avoir accepter la connection j'ai rajouter un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    label1.caption=wsck.count
    et la a ma grande surprise il m'affiche 2 alors qu'un seul client se connecte. Si vous savez d ou cela peut provenir

  4. #4
    Membre expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Points : 3 696
    Points
    3 696
    Par défaut
    Normal, le winsock d'indice zéro a été défini au desing time. tu ajoutes un winsock à chaque connection. donc dès le permier client, tu a deux controles winsock

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    140
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Mars 2008
    Messages : 140
    Points : 147
    Points
    147
    Par défaut
    quand un client quitte la connection j'ai l'evenement quivant qui se lance :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Wsck_Close(index As Integer)
        Unload Wsck(index)
        If Wsck.Count - 1 = 0 Then nb = 0
    End Sub
    Et j'ai mis dans mon code un for each justement pour ne pas avoir le problème d'envoie d'une donnée sur un client qui n'est pas connecté

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    140
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Mars 2008
    Messages : 140
    Points : 147
    Points
    147
    Par défaut
    donc en fait ca serai ce winsock 0 qui me genererait ce problème. Est il possible de ne pas tenir compte de ce winsock????

  7. #7
    Membre expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Points : 3 696
    Points
    3 696
    Par défaut
    Seulement le winsock d'indice zéro n'est jamais connecté, c'est probablement lui qui n'aime pas les senddata

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    140
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Mars 2008
    Messages : 140
    Points : 147
    Points
    147
    Par défaut
    oui c est cela car j ai essayé en pas a pas et si dans ma boucle for je saute le premier passage ca fonctionne. Il faudrai donc que j'arrive a ne pas tenir compte de ce winsock 0 Mais comment ?????

  9. #9
    Membre expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Points : 3 696
    Points
    3 696
    Par défaut
    Peso, j'utilises une chaine de caractères blanc dont la longeur correspond au nombres de connection maxi que j'autorise. quand je connecte le Xième client , je remplace le xieme caractère de la chaine par un X, que je remetrais à blanc à la deconnection.
    ensuite je fais une boucle du premier au dernier caractere , si j'ai un blanc, la cionnection est fermée, si j'ai un x, je peux envoyer un senddata.
    Par la même occasion, je charge / decharge le winsock en suivant bien cette chaine de caracteres, ce qui permet de réutiliser les trous (un client qui s'est déconnecté)

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    140
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Mars 2008
    Messages : 140
    Points : 147
    Points
    147
    Par défaut
    ok merci beaucoup delbeke je vais tester votre solution et je vous tien au courant.

  11. #11
    Membre expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Points : 3 696
    Points
    3 696
    Par défaut
    Pour t'aider j'ai ecrit vite fait ce bout de code
    Inspire tois en

    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
    Private Sub tcpServer_ConnectionRequest(ByVal requestID As Long)
      NumConnection = InStr(ListeConnect, " ")
      Mid(ListeConnect, NumConnection, 1) = "X"
      Load Wsck(NumConnection)
      Wsck(NumConnection).Accept requestID
      Wsck(NumConnection).SendData ("F" & "Bonjour" & "<FIN>")
      DoEvents
    End Sub
     
    Private Sub SendToAll(Text)
      Dim iPnt As Integer
      For iPnt = 1 To Len(ListeConnect)
        If Mid(ListeConnect, iPnt, 1) = "X" Then
          Wsck(iPnt).SendData Text & vbcrlf
        End If
      Next
    End Sub
     
    Private Sub Wsck_Close(index As Integer)
      Unload Wsck(index)
      Mid(ListeConnect, Index, 1) = " " 
    End Sub

  12. #12
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    140
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Mars 2008
    Messages : 140
    Points : 147
    Points
    147
    Par défaut
    merci a toi delbeke mon problème est résolu grâce a toi. Ta fonction fonctionne très bien encore un grand merci

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

Discussions similaires

  1. Probleme Client / Serveur en C
    Par tekken59 dans le forum GTK+ avec C & C++
    Réponses: 0
    Dernier message: 29/12/2008, 14h05
  2. [Reseaux] Probleme client/serveur
    Par franc82 dans le forum C++
    Réponses: 3
    Dernier message: 24/04/2007, 22h14
  3. probleme client serveur en c
    Par oclone dans le forum C
    Réponses: 2
    Dernier message: 09/12/2006, 21h59
  4. [Reseau] probleme client/serveur TCP LInux
    Par jmjmjm dans le forum Réseau
    Réponses: 20
    Dernier message: 03/12/2006, 19h32
  5. Probleme Client / Serveur
    Par Kinian dans le forum Access
    Réponses: 4
    Dernier message: 16/06/2006, 10h12

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