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 :

Serveur winsock probleme


Sujet :

VB 6 et antérieur

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 38
    Par défaut Serveur winsock probleme
    Salut tlm!

    Je suis en train de développer une application Winsock qui consiste en un serveur et un client

    Voici mon problème

    Quand je me connecte au serveur par le client, la première connexion est OK, mais quand un deuxième client se connecte le serveur n'envoie aucune réponse au client..je me demandais si quelqu'un qui connais bien winsock pourrai me donner un petit coup de main, merci d'avance

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

    Informations forums :
    Inscription : Mars 2008
    Messages : 140
    Par défaut
    Slt! D'après mon peu de connaissance avec winsock il faut que tu fasse un winsock.close avant de pouvoir accepter une autre connection.

  3. #3
    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
    Par défaut
    Si tu veux un serveur qui peut repondre à plusieurs clients simultanement, il te faut un controle winsock dédié à l'ecoute (methode listen). quand ce controle recoit une demande de connection, il transfere la suite des opération a un autre controle winsok. Il te faut donc prévoir, un controle winsock pour l'ecoute et autant de controle winsock que de client simultanement connectés pour les communications.

  4. #4
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 38
    Par défaut
    C'est ce que j'ai fait dans " l'event Form_Load " je vous montre un bout de mon code peut être que ça vous aideras

    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
    23
    24
    25
    Private Sub Form_Load()
    Winsock1.LocalPort = "1323"
    Winsock1.Listen
    'Jusque ici tous est OK
    End Sub
     
    Private Sub Winsock1_Close()
    Winsock1.Close 'On ferme encore
    End Sub
     
    Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
    Winsock1.Close 'Je ferme le control Winsock pour pouvoir accepter la connexion entrante
    Winsock1.Accept requestID 'j'accepte la connexion
    DoEvents
    Winsock1.SendData "Bienvenu!" 'J'envoie au client
    End Sub
     
    Private Sub Winsock1_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)
    MsgBox Error, vbCritical, "Error"
    'Si jamais il y a une erreur
    End Sub
     
    'Mais le problème c'est que le premier client peut se connecter
    'Mais quand un second client essai de se connecter le serveur n'envoie aucune donnes
    'Comme si le serveur avait subitement arrête

  5. #5
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    ben en effectuant un close, lors de la première connexion connexion tu sort le contrôle du mode attente (Listen) ... ce n'est pas ce que t'as dit Delbeke plus haut.. (il t'as dit d'utiliser une autre contrôle pour la connexion...)

  6. #6
    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
    Par défaut
    Il faudrait qulque chose du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
      Winsock2.Accept requestID 'j'accepte la connexion
      DoEvents
      Winsock2.SendData "Bienvenu!" 'J'envoie au client
    End Sub
    Si , a la conception de la feuille,tu definis ton controle winsock2 comme le premier élémént d'un groupe de controle (propriété index =0), on aurait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Dim ConectionOuvertes as string
    Private Sub Form_Load()
      ConectionOuvertes = string(16," ") 'pour 16 comm simultanée maxi
    End Sub
     
    Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
      Dim iPnt as integer
      iPnt= instr(ConectionOuvertes ," ")
      Load Winsock2(iPnt)
      Winsock2(iPnt).close  'sécurité
      Winsock2(iPnt).Accept requestID 'j'accepte la connexion
    End Sub
    Il te faudra apres gérer le groupe de controles winsock2 pour chacune des comms ouvertes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub Winsock2_Close(Index As Integer)
     Unload Winsock2(Index)
     mid(ConectionOuvertes ,Index,1) = " "
    End Sub
     
    Private Sub Winsock2_Connect(Index As Integer)
       mid(ConectionOuvertes ,Index,1) = "X"
      Winsock2(Index).SendData "Bienvenu!" 'J'envoie au client
    End Sub
     
    Private Sub Winsock2_DataArrival(Index As Integer, ByVal bytesTotal As Long)
      'Le client Index a envoyé des données
    End Sub

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

Discussions similaires

  1. Serveur-Client Probleme messagerie entre clients
    Par Aslan78 dans le forum C++Builder
    Réponses: 2
    Dernier message: 18/04/2007, 22h53
  2. Serveur SMTP :probleme d'envoie de mail
    Par santinopourvous dans le forum Apache
    Réponses: 1
    Dernier message: 30/06/2006, 23h00
  3. [VB]Référence winsock probleme !
    Par Shypster dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 18/03/2006, 22h15
  4. Script pour extraire la meteo depuis un serveur XML.Probleme
    Par Zarma67 dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 28/02/2006, 11h13
  5. Réponses: 1
    Dernier message: 04/11/2005, 23h26

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