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 et BeginReceive


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 et BeginReceive
    Bonjour,

    je fais une appli en utilisant les sockets, il y a un client et un serveur :

    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
      Private Sub Form_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            LoadConfigXml()
     
            If mode = "server" Then
                SocketListen()
            Else
                ConnectToServer()
                Timer1.Start()
            End If
        End Sub
     
        ' charge le fichier de configuration
        Private Sub LoadConfigXml()
            Dim xDoc As XmlDocument = New XmlDocument()
            xDoc.Load(My.Application.Info.DirectoryPath + "\config.xml")
            Dim root As XmlElement = xDoc.DocumentElement
            mode = root.GetAttribute("mode")
            ipServer = IPAddress.Parse(root.GetAttribute("ipserver"))
        End Sub
     
        ' mode serveur
        Private Sub SocketListen()
            socketServer = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
            socketServer.Bind(New IPEndPoint(ipServer, 15))
            socketServer.Listen(500)
            socketServer.BeginAccept(New AsyncCallback(AddressOf connexionAcceptCallback), socketServer)
        End Sub
     
        Private Sub ReceiveCallback(ByVal asyncResult As IAsyncResult)
            Debug.WriteLine("réception")
            Dim read As Integer = socketClient.EndReceive(asyncResult)
        End Sub
     
        Private Sub connexionAcceptCallback(ByVal asyncResult As IAsyncResult)
            socketServer.BeginReceive(tempBuffer, 0, tempBuffer.Length, SocketFlags.None, AddressOf ReceiveCallback, socketClient)
            socketClient = socketServer.EndAccept(asyncResult)
            Debug.WriteLine("connexion acceptée")
        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)
            socketClient.EndConnect(asyncResult)
        End Sub
     
        ' test envoie message
        Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
            Dim buff As Byte() = System.Text.Encoding.ASCII.GetBytes("test")
            socketClient.BeginSend(buff, 0, buff.Length, SocketFlags.None, AddressOf SendCallback, socketClient)
        End Sub
     
        Private Sub SendCallback(ByVal asyncResult As IAsyncResult)
            Dim send As Integer = socketClient.EndSend(asyncResult)
        End Sub
    Mais lorsque je mets mon appli en mode client et que je me connecte au serveur j'ai cette exception :

    Une requête d'envoi ou de réception de données n'a pas été autorisée car le socket n'est pas connecté et (lors de l'envoi sur un socket datagramme en utilisant un appel sendto) aucune adresse n'a été fournie
    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
    Tu arrives à te connecter à ton serveur ? car ce message apparait pour la connexion je pense. En fait tu listen sur une mauvaises IP du coté serveur ou alors tu te connectes pas sur la bonne Ip coté client.

    Exemple si j'ai un routeur mon ip est de la forme 192.168.X.X et ma vrai ip est 82.124.56.121 par exemple.

    Du coté serveur il faut listen sur l'ip du routeur ==> 192.168.X.X et coté client il faut se connecter sur la vrai ip ==> 82.124.56.121

    Voila chez moi aussi j'ai eu bcp de probleme avec cela
    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 !

  3. #3
    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
    Oui car cela marche en mode synchrone, mais pas en asynchrone.
    C'est lorsque je fais le :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub connexionAcceptCallback(ByVal asyncResult As IAsyncResult)
            socketServer.BeginReceive(tempBuffer, 0, tempBuffer.Length, SocketFlags.None, AddressOf ReceiveCallback, socketClient)
            socketClient = socketServer.EndAccept(asyncResult)
            Debug.WriteLine("connexion acceptée")
        End Sub
    en gros il me dit que socketServer n'est pas connecté ...

  4. #4
    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
    Bah y'a pas de raison que ca bloque en asynchrone. Tu as tester avec ce que j'ai dis précédement ?
    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 !

  5. #5
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    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 197
    Par défaut
    tente le endaccept avant le beginreceive, je pense qu'il faut que la connexion soit établie avant le beginreceive
    par contre j'ai pas compris ce que vient faire le client dans le coté serveur
    socketClient = socketServer.EndAccept(asyncResult)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

Discussions similaires

  1. executer une application a distance : Sockets ? RPC ? CORBA?
    Par a_hic dans le forum Développement
    Réponses: 5
    Dernier message: 30/05/2006, 13h02
  2. raw socket et langage c
    Par SlayDave dans le forum Développement
    Réponses: 2
    Dernier message: 29/08/2002, 19h09
  3. socket
    Par ben91 dans le forum Développement
    Réponses: 5
    Dernier message: 13/08/2002, 11h04
  4. Socket:Envoyer du texte d'un serveur vers tout les clients
    Par cedm78 dans le forum Web & réseau
    Réponses: 7
    Dernier message: 01/08/2002, 16h40
  5. transfert d'un fichier bitmap en socket tcp
    Par localhost dans le forum C++Builder
    Réponses: 5
    Dernier message: 29/07/2002, 00h40

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