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 :

Sockets multi clients


Sujet :

VB.NET

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2005
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 23
    Par défaut Sockets multi clients
    Bonjour,

    je suis sur un appli serveur avec plusieurs clients, mais dans ma fonction de réception des messages, je reçois seulement ceux de mon premier client, mais pas du second.

    Je lance cette appli soit en mode client, soit en mode serveur.

    J'ai fait des test et mes clients sont bien connectés, voici un extrait du 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
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    ' mode serveur
        Private Sub SocketListen()
            socketServer = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
            socketServer.Bind(New IPEndPoint(ipServer, 15))
            socketServer.Listen(10)
            socketServer.BeginAccept(New AsyncCallback(AddressOf connexionAcceptCallback), socketServer)
     
        End Sub
     
        Private Sub connexionAcceptCallback(ByVal asyncResult As IAsyncResult)
            MsgBox("connexionAcceptCallback")
            s2 = socketServer.EndAccept(asyncResult)
            s2.BeginReceive(tempBuffer, 0, tempBuffer.Length, SocketFlags.None, AddressOf ReceiveCallback, socketClient)
        End Sub
     
        ' mode client
        Private Sub ConnectToServer()
            socketClient = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
            socketClient.BeginConnect(New IPEndPoint(ipServer, 15), AddressOf ConnexionConnectCallback, socketClient)
        End Sub
     
        Private Sub ConnexionConnectCallback(ByVal asyncResult As IAsyncResult)
            If socketClient.Connected = False Then
                MsgBox("La connexion vers le serveur a échouée")
            Else
                socketClient.BeginReceive(tempBuffer, 0, tempBuffer.Length, SocketFlags.None, AddressOf ReceiveCallback, socketClient)
                socketClient.EndConnect(asyncResult)
            End If
        End Sub
     
        ' callback pour la reception des messages
        Private Sub ReceiveCallback(ByVal asyncResult As IAsyncResult)
            Dim mesg As String
     
            MsgBox(System.Text.Encoding.ASCII.GetString(tempBuffer))
     
            If mode = "server" Then
                Dim read As Integer = s2.EndReceive(asyncResult)
                s2.BeginReceive(tempBuffer, 0, tempBuffer.Length, SocketFlags.None, AddressOf ReceiveCallback, s2)
                mesg = System.Text.Encoding.ASCII.GetString(tempBuffer)
                ' si le serveur recoit un message de type end il incremente son compteur
                If (StrComp(mesg, "end")) Then
                    counter += 1
                    If myVideo.Playing = False And counter = 2 Then
                        PlayVideos()
                    End If
                End If
     
            ElseIf mode = "client" Then
                Dim read As Integer = socketClient.EndReceive(asyncResult)
                socketClient.BeginReceive(tempBuffer, 0, tempBuffer.Length, SocketFlags.None, AddressOf ReceiveCallback, socketClient)
                mesg = System.Text.Encoding.ASCII.GetString(tempBuffer)
                ' si le client recoit un message de type replay il relance sa video
                If (StrComp(mesg, "replay")) Then
                    myVideo.Play()
                End If
            End If
        End Sub
     
        ' callback pour l'envoi des messages
        Private Sub SendCallback(ByVal asyncResult As IAsyncResult)
            If mode = "server" Then
                Dim send As Integer = s2.EndSend(asyncResult)
            ElseIf mode = "client" Then
                Dim send As Integer = socketClient.EndSend(asyncResult)
            End If
        End Sub
    En gros je me suis apercu que la methode ReceiveCallback est lancé seulement par le premier client.

    Merci de votre aide.

  2. #2
    Membre Expert
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Par défaut
    Pourquoi fais tu un double post ? On t'as répondu dans l'autre...
    Qui ne tente rien n'a rien !
    Ce qui ne nous tue pas nous rends plus fort !!
    Mon projet ZELDA en C++/Allegro
    http://www.tutoworld.com - Le Forum -
    Mes ressources Dotnet (cours, sources, tutos)
    --------------------------------------------
    + + =

    Ne pas oublier le Tag !

Discussions similaires

  1. Serveur socket multi client qui bloque sur le premier client
    Par cyclopsnet dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 07/05/2014, 21h31
  2. Socket multi client
    Par kloklo55 dans le forum Réseau
    Réponses: 2
    Dernier message: 04/03/2011, 14h45
  3. [sockets][UDP][C/C++] serveur multi-clients
    Par l@rry dans le forum Développement
    Réponses: 4
    Dernier message: 08/06/2006, 14h11
  4. [Socket] Comment faire du multi-client ?
    Par eric30eric dans le forum Web & réseau
    Réponses: 5
    Dernier message: 05/01/2005, 21h39

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