begin process at 2012 02 14 00:46:38
  Trouver un code source :
 
dans
 
Accueil > Forum > 

VB.NET et VB 2005

 > 

Réseaux & Internet

 > 

Sockets

 > 

Client server Vb .net


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Client server Vb .net

vendredi 11 juillet 2008 à 17:35:03 | Client server Vb .net

Hamz01

slt tout le monde,
je viens de devellopper une interface qui permets de comuniquer avec un pc distant via le reseau. En effet, au niveau de l'interface il y a une texte box dans laquelle on entre du texte et lorsque l'on clique sur envoi le message saisit apparait sur l'ecran hyperterminal de l'autre pc, ceci se fait via les fonctions sockets. Mon probleme est le suivant j'ai rajouté sur mon interface une deuxieme texte box dans laquelle j'aimerais recevoir des données dans le sens inverse , c'est à dire que lorsque je saisit de caractere au clavier de l'autre pc depuis hyperterminal j'aimerais que l'interface me les affiche dans la textebox n¨°2.
a l'heure d'aujourd'hui je n'arrive a recevoir qu'un seul cractere donc  j'aimerais savoir ce que je pourrait faire pour pouvoir en recevoir plus voici mon code :

Imports System.Net.Sockets
Imports System.Threading
Imports System.IO
Imports System.Text


Public Class Form1
    Dim ecouteur As New TcpListener(port)
    Dim client As New TcpClient
    Dim Message As String = ""
    Dim adressip As String
    Dim port As Integer


    Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
        Try
            If Button5.Enabled = True Then
                Try
                    adressip = TextBox2.Text
                    port = TextBox3.Text
                    client = New TcpClient(adressip, port)
                    Dim ecouteur As New TcpListener(port)
                Catch ex As InvalidCastException
                    MessageBox.Show(ex.Message, "Erreur")
                    MessageBox.Show(" Veuillez spécifier la destination. ", "Erreur")
                End Try

            End If
        Catch Ex As SocketException

            MessageBox.Show(Ex.Message, "Erreur")
            MessageBox.Show("Verifiez l'état de votre connexion", "Erreur")
        End Try

    End Sub

    Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
        ecouteur.Stop()
    End Sub
    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Dim ListThread As New Thread(New ThreadStart(AddressOf Listening))
        ListThread.Start()
    End Sub



    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        End
    End Sub

    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
        If Button4.Enabled = True Then
            GroupBox1.Visible = True
        End If
    End Sub


    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        If Button1.Enabled = True Then
            Try
                Dim Writer As New StreamWriter(client.GetStream())
                Writer.Write(TextBox1.Text)
                Try
                    Writer.Flush()
                Catch ex As IOException
                    MessageBox.Show(ex.Message, "Erreur")
                    MessageBox.Show("Veuillez recommencez.", "Erreur")
                End Try
            Catch ex As InvalidOperationException
                MessageBox.Show(ex.Message, "Erreur")
                MessageBox.Show("Veuillez vous connecter au client.", "Erreur")
            End Try
        End If

    End Sub
    Private Sub Listening()
        ecouteur.Start()
    End Sub

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        If ecouteur.Pending = True Then
            Message = ""
            client = ecouteur.AcceptTcpClient()
        End If
    End Sub


    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        If Button2.Enabled = True Then
            client.Close()
        End If

    End Sub

    Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click
        If Button6.Enabled = True Then

            Try
                Dim Reader As New StreamReader(client.GetStream)
                While Reader.Peek > 100
                    TextBox4.Text = Message + Convert.ToChar(Reader.Read()).ToString
                End While
            Catch ex As InvalidOperationException
                MessageBox.Show(ex.Message, "Erreur")
                MessageBox.Show("Veuillez vous connecter au client.", "Erreur")
            End Try
        End If

    End Sub

End Class
vendredi 11 juillet 2008 à 17:37:30 | Re : Client server Vb .net

Hamz01

merci d'avance
vendredi 11 juillet 2008 à 18:37:52 | Re : Client server Vb .net

jack

Administrateur CodeS-SourceS
Salut
Prends l'habitude de donner des noms parlant à tes boutons et autres TextBox, parce que là, difficile du premier coup d'oeil de savoir se qui se fait dans telle ou telle procédure.
Au final, seul "Button6_Click" concerne ta question, et par malchance, elle est à la fin.
Tout ceci pour dire qu'on perd du temps et que certains peuvent être découragés de lire une telle page.

Dans cette procédure, on trouve :
- Pas de lecture tant qu'il n'y a pas 100 Bytes dans le Buffer
Dommage.
Un "If" et un ce test "> 0" aurait suffit
- Le texte récupéré va dans TextBox4
Si ce n'est pas l'endroit où tu veux envoyer les données, changes-en.
Que représente "Message" ?

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
vendredi 11 juillet 2008 à 18:38:50 | Re : Client server Vb .net

jack

Administrateur CodeS-SourceS
PS : Ton Socket génère t-il un évènement lorsqu'il reçoit des données ? (genre DataArrival en WinSock)
Ce serait quand même plus efficace que des boutons partout
samedi 12 juillet 2008 à 03:56:04 | Re : Client server Vb .net

Kevin.Ory

Salut,

Fais gaffe lorsque tu utilise des threads de ne pas faire d'opération inter-thread. Ton 'ecouteur' est créé et lu dans le thread principal mais sa méthode 'Start' est appelé dans le deuxième thread. Dans ton cas ça fonctionne car il n'y a aucune chance que les 2 thread accède à 'ecouteur' en même temps, mais si c'était le cas => plantage.
Tu devrais créer, écouter et lire ton 'ecouteur' dans un 2ème thread, et une fois une connection accepté, envoyer le client au thread principal. La classe System.Component.BackgroundWorker est idéal pour faire ce genre de trucs, elle permet de transferer tes clients par l'appel de BackgroundWorker.ReportProgress.

'Button6' sert donc à réceptionner les données? Et si tu le presse plusieurs fois de suite, tu recoit le reste du message?
Essaie un
TextBox4.Text = Message & Reader.ReadToEnd()
au lieu de
While Reader.Peek > 100
    TextBox4.Text = Message + Convert.ToChar(Reader.Read()).ToString
End While
et mets un 'If Not Reader.EndOfStream Then' devant


Pour mieux faire, tu pourrais lire et envoyer les données dans des threads séparés aussi, mais pour un petit chat avec des textes pas trop long ça va très bien comme ça

Et bon, sans oublier que pour un vrai prog du genre, tu devra gérer plusieurs clients, au max un par contact.



mardi 15 juillet 2008 à 10:31:34 | Re : Client server Vb .net

Hamz01

salut,
merci les gars pour vos réponses,
" Salut
Prends l'habitude de donner des noms parlant à tes boutons et autres TextBox, parce que là, difficile du premier coup d'oeil de savoir se qui se fait dans telle ou telle procédure.
Au final, seul "Button6_Click" concerne ta question, et par malchance, elle est à la fin.
Tout ceci pour dire qu'on perd du temps et que certains peuvent être découragés de lire une telle page." Sa marche pour moi Jack je m'en souviendrais pour la prochaine fois ;)

Cependant j'ai essayé les deux suggestions que vous m'avez conseillez cela ne marche pas. Quand je fais seulement la comparaison avec le if >0 je ne reçois plus aucun caractere.
Et quand j'essaie if not reader.endofstream then
textbox4.text=message & reader.readtoend
l'inteface plante .

cependant j'aurais en savoir plus concerant les deux pistes que vous me donner tous les deux a savoir l'evenement data arrival et faires des threads séparés.

Encore une fois merci les gars et à bientot j'espere.


mardi 6 décembre 2011 à 21:45:46 | Re : Client server Vb .net


Cette discussion est classée dans : end, system, click, if, byval


Répondre à ce message

Sujets en rapport avec ce message

Visionneuse d'images-Précédent/Suivant [ par Miniblock ] Salut ! Venant de me remettre au vb, j'ai eu l'idée de faire une visionneuse d'images. Celle çi se compose d'un bouton Zoom (BTZ) qui passe entre "Ima Afficher le titre en cours de lecture sur une webradio [ par Pyx3l ] Bonjour ! J'ai crée un player pour mes webradios (tournant sous Icecast 2) en Visual Basic. Je débute, s'il vous plait soyez indulgents... [^^clinoei multi onglet comment faire naviguateur [ par david45400 ] Bonjour je me présente David je travaille dans l'informatique dans une entreprise de dépannage j'ai 25 ans , en alternance école plus formation, je veillez me couriger ce code ,d'un equation de 2m degre [ par badbadtoo ] Public Class Form1 Dim a As Double Dim b As Double Dim c As Double Dim d As Double Dim x1 As Double Dim x2 As Double Dim s Aides s'il vous plait ? [ par zyza ] bonjour j'ai un problème donc voila j'ai mis les script sur des image (ouvrir, enregistrer etc...) mais quand je le test les script ne fonctionne pas. Besoin d'aide: " La référence d'objet n'est pas définie à une instance d'un objet " [ par pabloxo ] Bonjour à tous et toutes Voilà cela fait des heures que je planche dessus et je n'arrive pas a comprendre d'ou viens l'erreur et surtout comment la c vb.net paramètre sauvegarde de valeurs [ par question911 ] Bonjour, À l'ouverture de mon petit programme il demande un numéro de série qui est 333. Dès que la personne à tapé se numéro de série une page s'ouvr ecrire que binaire dans une zone de texte [ par mannour85 ] salut je suis entains de faire un code pour faire une conversion de la base 2 a la base 16 puis afficher des courbes (256)pour chaque valeurs c ad 000 Urgent problème de variables dans mon programme [ par arween76 ] Bonsoir, Je débute en VB.Net. J'ai créé un programme de création de répertoire. Il fonctionne bien ... sauf que si je crée un répertoire puis que je ajout de donnée a partir d'un textbox sur une base access [ par napsterachem ] salut tout le monde, j'ai besoin d'aide, j'ai une base de donnée access " gest_incident " et sur un form je veut ajouter des données a partir de 2 tex


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,342 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales