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 :

Stream TCP Client


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2010
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 82
    Par défaut Stream TCP Client
    Bonjour,

    Je viens de commencer la création d'un jeu de carte et j'ai une petite question :

    J'ai une fenêtre côté client qui affiche le nombre de joueurs connectés,
    J'ai mon serveur qui compte le nombre de joueur et l'envoie dans le buffer,

    J'aimerai que la fenêtre côté client affiche le nombre de joueurs connectés au serveur, sans avoir à appuyer sur un bouton ou autre déclencheur pour lire le flux de données, j'aimerai que ce soit un flux continu enfaite et qui se ferme (le flux continu pas la connexion car le serveur communique ensuite encore mais je ferai les transmissions sans doute avec des boutons) une fois qu'il y a 4 joueurs de connectés afin d'ouvrir une nouvelle fenêtre ensuite,

    Comment faire ?


    Merci !


    EDIT : peut-être avec beginconnect ? si oui comment procéder ? sachant que j'ai ma connexion stockée dans c_tcpclient (tcpclient.Connect(ip,port))

  2. #2
    Membre chevronné Avatar de Jerede
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2010
    Messages
    271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mai 2010
    Messages : 271
    Par défaut
    Je comprends pas trop l'intérêt d'envoyer les informations en continu, à part surcharger le serveur.
    Quand le Client se connecte au serveur, laisse le connecter, sert à rien de le déconnecter pour le reconnecter par la suite.
    Pour l'actualisation du nombre de joueur, tu as juste a renvoyer le nombre de joueur connectés lorsqu'un joueur se connecte ou se déconnecte.

  3. #3
    Membre confirmé
    Inscrit en
    Janvier 2010
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 82
    Par défaut
    Enfaite ça m'intéresse pas spécialement de laisser les informations circuler en continu mais je pensais que c'était cette méthode qu'il fallait que j'applique..

    Par contre je comprends pas comment faire ce que tu me dis, je le met où le code disant au client de faire textbox.text = c_messageduserveur ?
    Parce que si je le met dans une procédure faut bien que j'appelle la procédure quelque part pour faire la vérif :/, ou bien je fais une boucle while qui cherche l'info tant qu'elle n'a pas trouvée mais pareil ça surcharge le serveur je suppose :/

  4. #4
    Membre confirmé
    Inscrit en
    Janvier 2010
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 82
    Par défaut
    Autre question, comment envoyer un objet du serveur au client ? Par exemple je voudrai envoyer un tableau de nombre du serveur au client


    Merci

  5. #5
    Membre éprouvé Avatar de Anklor
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2011
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2011
    Messages : 76
    Par défaut
    Il faut utiliser les methodes de "serialization" et "désérialization"

    Tu ajoute <serializable> au dessus de ta classe.
    Fait attention que ta classe soit référencé dans tes 2 projets (Serveur et Client) sinon tu risque d'avoir des soucis.

  6. #6
    Membre confirmé
    Inscrit en
    Janvier 2010
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 82
    Par défaut
    Ok merci,

    Et concernant les échanges de données client/serveur ? Je peux pas bien avancer au stade où j'en suis sans savoir comment recevoir les données du serveur sans avoir par ex. à appuyer sur un bouton pour déclencher la lecture des données.

    Merci d'avance

  7. #7
    Membre confirmé
    Inscrit en
    Janvier 2010
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 82
    Par défaut
    C'est bon j'ai trouvé...

    Donc un timer pour attendre pour les données,

    et dans ma fonction qui lit le flux que j'avais pris sur un site il y a avait un do loop while dataavailable=true , donc du coup ça laissait jamais la main à l'application d'où le fait que je comprenais pas comment faire...

  8. #8
    Membre chevronné Avatar de Jerede
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2010
    Messages
    271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mai 2010
    Messages : 271
    Par défaut
    En aucun cas tu n'as besoin de timer, tu traites les données quand elles arrivent.
    Quelle classe et fonctions utilises-tu pour tes connexions sockets afin qu'on te conseille?

  9. #9
    Membre confirmé
    Inscrit en
    Janvier 2010
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 82
    Par défaut
    Oki, pour l'instant je continue comme ça alors jusqu'à qu'on trouve la solution

    donc j'ai ma form de démarrage qui contient mon label du nombre de joueurs :

    J'ai mis en commentaire le if vu que ça fonctionne pas...
    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
    Sub New(ByVal p_tcpclient As System.Net.Sockets.TcpClient)
            InitializeComponent()
            c_tcpclient = p_tcpclient
            c_communication_flux = New cls_communication_flux(c_tcpclient)
        End Sub
     
        Private Sub btn_connexion_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles btn_connexion.Click
            btn_connexion.IsEnabled = False
            c_nomjoueur = txt_nomjoueur.Text
            c_communication_flux.EcrireFlux(c_nomjoueur)
            c_idjoueur = c_communication_flux.LireFlux
            'If c_idjoueur = " 4" Then
            c_plateaujeu = New MainWindow(c_tcpclient, c_communication_flux, c_nomjoueur, c_idjoueur)
            Me.Close()
            c_plateaujeu.Visibility = Windows.Visibility.Visible
            'End If
        End Sub

    et la classe qui gère les flux :
    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
     
    Public Class cls_communication_flux
        Dim c_buffer(1024) As Byte
        Dim c_message As StringBuilder = New StringBuilder()
        Private c_tcpclient As TcpClient
        Private c_flux As Net.Sockets.NetworkStream
     
        Sub New(ByVal p_tcpclient As TcpClient)
            c_tcpclient = p_tcpclient
            c_flux = c_tcpclient.GetStream
        End Sub
     
        Function LireFlux() As String
            If c_flux.CanRead Then
                Dim numberOfBytesRead As Integer = 0
                Do
                    numberOfBytesRead = c_flux.Read(c_buffer, 0, c_buffer.Length)
                    c_message.AppendFormat("{0}", Encoding.ASCII.GetString(c_buffer, 0, numberOfBytesRead))
                Loop While c_flux.DataAvailable
                ' Print out the received message to the console.
                Return c_message.ToString()
            Else
                Return "Sorry. You cannot read from this NetworkStream."
            End If
        End Function
     
        Sub EcrireFlux(ByVal p_message As String)
            c_buffer = System.Text.Encoding.ASCII.GetBytes(p_message)
            c_flux.Write(c_buffer, 0, c_buffer.Length)
        End Sub
    End Class
    Donc là j'ai pas encore enlever le do loop while, pas eu le temps de m'en occuper, donc je pense que ça vient des deux méthode lire et écrire car vu que j'y connais pas grand chose...

    Voila, et donc une fois que le client s'est connecté le serveur écrit dans le flux pour dire combien de joueur sont connectés


    Merci d'avance

Discussions similaires

  1. iptables redirection tcp (client->server)
    Par wosu_ dans le forum Réseau
    Réponses: 2
    Dernier message: 09/01/2009, 13h13
  2. tcp client erreur
    Par kirtap1969 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 28/08/2008, 20h49
  3. Fichier Corrompu avec TCP Client
    Par Invité dans le forum C#
    Réponses: 2
    Dernier message: 14/05/2008, 16h53
  4. [VB.net] TCP Client, connaitre l'etat de la cnx ?
    Par Olif dans le forum Windows Forms
    Réponses: 14
    Dernier message: 25/09/2007, 22h53
  5. [TCP] Client/Serveur avec les composants Indy
    Par bakaneko dans le forum C++Builder
    Réponses: 2
    Dernier message: 14/02/2007, 12h47

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