[Prog]Vb.net 2008 - Problème avec code pour serveur (socket)

germain67 Messages postés 24 Date d'inscription lundi 10 novembre 2008 Statut Membre Dernière intervention 29 mai 2011 - 28 mai 2011 à 14:45
germain67 Messages postés 24 Date d'inscription lundi 10 novembre 2008 Statut Membre Dernière intervention 29 mai 2011 - 29 mai 2011 à 16:04
Salut à tous !

En ce moment j'essaye de gérer un client et un serveur en vb.net
J'ai trouvé un code en console , mais il y a un problème majeur que je n'ai pas su résoudre :
Une fois le premier message reçu , le serveur se ferme , j'ai essayé de mettre une boucle sans succès , car seul le premier message me parvenait ... !

Auriez-vous une idée ?

Serveur : Citation:
Imports System.Net.Sockets
Imports System.Text

Module Module1
Dim server As New TcpListener("5000")
Dim client As New TcpClient
Dim stream As NetworkStream

Sub Main()
Console.WriteLine("En attente d'un client ...")
server.Start()
client = server.AcceptTcpClient
stream = client.GetStream
Dim recvbyte(client.ReceiveBufferSize) As Byte
stream.Read(recvbyte, 0, client.ReceiveBufferSize)
Dim recvtext As String = Encoding.ASCII.GetString(recvbyte)
Console.WriteLine(recvtext)
'Dim sendbytes() As Byte = Encoding.ASCII.GetBytes("Le serveur lui aussi peut emmettre !")
'stream.Write(sendbytes, 0, sendbytes.length)
End Sub
End Module



Client : Citation:
Imports System.Net.Sockets
Imports System.Text

Module Module1
Sub main()
Dim client As New Net.Sockets.TcpClient
Dim stream As NetworkStream = Nothing
Console.WriteLine("En attente du serveur ...")
Try
client.Connect("127.0.0.1", "5000")
Catch
Console.ForegroundColor = ConsoleColor.Red
Console.WriteLine("La connection a echouée !")
Console.ReadLine()
End
End Try
Console.ForegroundColor = ConsoleColor.Green
Console.WriteLine("Connecté !")
Console.ForegroundColor = ConsoleColor.Gray
stream = client.GetStream()
Console.Write("Moi : ")
Dim sendtext As String = Console.ReadLine()
Dim sendbytes() As Byte = Encoding.ASCII.GetBytes(sendtext)
stream.Write(sendbytes, 0, sendbytes.Length)
'Dim recivebytes(client.ReceiveBufferSize) As Byte
'stream.Read(recivebytes, 0, client.ReceiveBufferSize)
'Console.WriteLine("server: " + Encoding.ASCII.GetString(recivebytes))
End Sub
End Module



Merci beaucoup d'avance !
Germain

7 réponses

germain67 Messages postés 24 Date d'inscription lundi 10 novembre 2008 Statut Membre Dernière intervention 29 mai 2011
28 mai 2011 à 14:49
Pardon oublié de mettre la balise code ... !

Serveur :
Imports System.Net.Sockets 
Imports System.Text 

Module Module1 
 Dim server As New TcpListener("5000") 
 Dim client As New TcpClient 
 Dim stream As NetworkStream 

 Sub Main() 
 Console.WriteLine("En attente d'un client ...") 
 server.Start() 
 client = server.AcceptTcpClient 
 stream = client.GetStream 
 Dim recvbyte(client.ReceiveBufferSize) As Byte 
 stream.Read(recvbyte, 0, client.ReceiveBufferSize) 
 Dim recvtext As String = Encoding.ASCII.GetString(recvbyte) 
 Console.WriteLine(recvtext) 
 'Dim sendbytes() As Byte = Encoding.ASCII.GetBytes("Le serveur lui aussi peut emmettre !") 
 'stream.Write(sendbytes, 0, sendbytes.length) 
 End Sub 
End Module


Client :
Imports System.Net.Sockets 
Imports System.Text 

Module Module1 
 Sub main() 
 Dim client As New Net.Sockets.TcpClient 
 Dim stream As NetworkStream = Nothing 
 Console.WriteLine("En attente du serveur ...") 
 Try 
 client.Connect("127.0.0.1", "5000") 
 Catch 
 Console.ForegroundColor = ConsoleColor.Red 
 Console.WriteLine("La connection a echouée !") 
 Console.ReadLine() 
 End 
 End Try 
 Console.ForegroundColor = ConsoleColor.Green 
 Console.WriteLine("Connecté !") 
 Console.ForegroundColor = ConsoleColor.Gray 
 stream = client.GetStream() 
 Console.Write("Moi : ") 
 Dim sendtext As String = Console.ReadLine() 
 Dim sendbytes() As Byte = Encoding.ASCII.GetBytes(sendtext) 
 stream.Write(sendbytes, 0, sendbytes.Length) 
 'Dim recivebytes(client.ReceiveBufferSize) As Byte 
 'stream.Read(recivebytes, 0, client.ReceiveBufferSize) 
 'Console.WriteLine("server: " + Encoding.ASCII.GetString(recivebytes)) 
 End Sub 
End Module
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
28 mai 2011 à 15:27
Bonjour,

Où as-tu mis la boucle sur ton serveur, car elle n'apparait pas ?

Le client envoi un message puis se ferme, donc il faut aussi lui mettre une boucle d'entrée pour garder la main.

Mon site
0
germain67 Messages postés 24 Date d'inscription lundi 10 novembre 2008 Statut Membre Dernière intervention 29 mai 2011
28 mai 2011 à 18:58
J'avais tenté , mais j'ai du mal le faire je pense !
J'avais mis quelquechose comme ça :

maboucle:
(liste des instructions)
goto maboucle

Mais ça ne marchais pas !
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
28 mai 2011 à 19:33
Bonjour,

Tu n'as pas honte de faire un truc aussi horrible :D
Un GOTO !!!
à ne jamais utiliser sans un vrai motif (ce qui est extremement rare en VB) valable et dûement justifié.

Dans ton cas, un Do/Loop est largement plus propre.

Sinon, tu as mis quelles instructions au milieu ?

Car il y en a plusieurs dans ton code.

Mon site
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
germain67 Messages postés 24 Date d'inscription lundi 10 novembre 2008 Statut Membre Dernière intervention 29 mai 2011
28 mai 2011 à 21:27
Bah en faites j'avais remis ça entre le début et la fin de la boucle :
 client = server.AcceptTcpClient 
 stream = client.GetStream 
 Dim recvbyte(client.ReceiveBufferSize) As Byte 
 stream.Read(recvbyte, 0, client.ReceiveBufferSize) 
 Dim recvtext As String = Encoding.ASCII.GetString(recvbyte) 
 Console.WriteLine(recvtext) 
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
28 mai 2011 à 21:36
Bonjour,

Seul ce morceau de code est nécessaire dans la boucle :
 Dim recvbyte(client.ReceiveBufferSize) As Byte 
 stream.Read(recvbyte, 0, client.ReceiveBufferSize) 
 Dim recvtext As String = Encoding.ASCII.GetString(recvbyte) 
 Console.WriteLine(recvtext) 


Car si tu mets :
client = server.AcceptTcpClient
Il attends à chaque fois un nouveau client.

Mon site
0
germain67 Messages postés 24 Date d'inscription lundi 10 novembre 2008 Statut Membre Dernière intervention 29 mai 2011
29 mai 2011 à 16:04
Ok je vais essayer ;) !
0
Rejoignez-nous