Hamz01
Messages postés17Date d'inscriptionlundi 30 juin 2008StatutMembreDernière intervention 7 mars 2010
-
11 juil. 2008 à 17:35
hsarra
Messages postés1Date d'inscriptiondimanche 30 octobre 2011StatutMembreDernière intervention 6 décembre 2011
-
6 déc. 2011 à 21:45
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 :
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
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 11 juil. 2008 à 18:37
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
<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 11 juil. 2008 à 18:38
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
Kevin.Ory
Messages postés840Date d'inscriptionmercredi 22 octobre 2003StatutMembreDernière intervention 7 janvier 200911 12 juil. 2008 à 03:56
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
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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Hamz01
Messages postés17Date d'inscriptionlundi 30 juin 2008StatutMembreDernière intervention 7 mars 2010 15 juil. 2008 à 10:31
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.