tonyledragon
Messages postés173Date d'inscriptionlundi 2 mai 2011StatutMembreDernière intervention13 décembre 2012
-
28 avril 2012 à 11:56
NHenry
Messages postés15156Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention29 septembre 2024
-
15 mai 2012 à 20:56
Bonjour,Voila sa fait deja quelque mois que j'ai apprit a utiliser VB.net avec vb.net 2010 express,enfin bref ...
J'aimerais comme dit le titre créer un serveur et client.
On m'a dit que la meilleur technique pour un serveur multi client et de installer des Socket pour le serveur donc sa fait un moment je cherche un Tutorial sur les sockets.
Bref pason voici ma demande exactement :
1-Le client et obliger d'avoir des socket ou lui peut utiliser winsock (exemple serveur socket client winsock )
2-Pouvez-vous m'aidez à trouver un Tutorial sur les socket et leur gestion ?
car je sais déclarer des sockets mais je sais pas comment en importer plusieurs et surtout les connecté et déconnecte.
NHenry
Messages postés15156Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention29 septembre 2024159 5 mai 2012 à 15:01
Bonjour,
en .NET, regardes plutôt System.Net.Sockets.TcpListener et System.Net.Sockets.TcpClient.
Ce sera plus simple à gérer.
---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualVasic (onglet Références dans les propriétés du projet).
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list ---
NHenry
Messages postés15156Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention29 septembre 2024159 5 mai 2012 à 16:41
Bonjour,
Utilises une variable colmptant le nombre de connexion faites.
Sinon, regardes du coté des collections : List(Of ...)
---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualVasic (onglet Références dans les propriétés du projet).
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list ---
NHenry
Messages postés15156Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention29 septembre 2024159 5 mai 2012 à 19:23
Bonjour,
Il y a un flux pour chaque Socket, regardes dans les propriétés des classes.
---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualVasic (onglet Références dans les propriétés du projet).
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list ---
tonyledragon
Messages postés173Date d'inscriptionlundi 2 mai 2011StatutMembreDernière intervention13 décembre 20121 9 mai 2012 à 17:09
c'est bon j'ai trouvé !
voici les codes
serveur :
Imports System.Net.Sockets.TcpListener
Imports System.Net
Imports System.Net.Sockets
Imports System.Text
Public Class Form1
Dim serversocket As New TcpListener(IPAddress.Parse("192.168.1.10"), 4000)
Dim clientsocket As TcpClient
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
coClient.RunWorkerAsync()
End Sub
Private Sub coclient_DoWork(sender As System.Object, e As System.ComponentModel.DoWorkEventArgs) Handles coClient.DoWork
Dim counter As Integer = 0
serversocket.Start()
While (True)
counter += 1
clientsocket = serversocket.AcceptTcpClient
MsgBox("clientsocket n°" + Convert.ToString(counter) + "-- connexion")
End While
clientsocket.Close()
serversocket.Stop()
End Sub
Public Function GetStream() As NetworkStream
Dim netStream As NetworkStream = clientsocket.GetStream()
Dim sendbytes As [Byte]() = Encoding.UTF8.GetBytes("test")
netStream.Write(sendbytes, 0, sendbytes.Length)
clientsocket.Close()
netStream.Close()
End Function
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
GetStream()
End Sub
End Class
Client :
Imports System.Net.Sockets.TcpClient
Imports System.Net
Imports System.Net.Sockets
Imports System.Text
Class Form1
Dim clientsocket = New TcpClient("192.168.1.10", 4000)
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
getstream
End Sub
Public Function GetStream() As NetworkStream
Dim netStream As NetworkStream = clientsocket.GetStream()
Dim bytes(clientsocket.ReceiveBufferSize) As Byte
If netStream.CanRead Then
netStream.Read(bytes, 0, CInt(clientsocket.ReceiveBufferSize))
Dim returndata As String = Encoding.ASCII.GetString(bytes)
MsgBox(returndata)
clientsocket.Close()
netStream.Close()
End If
End Function
End Class
seul chose comment fait ton pour appeler le getstream quand il recoi des données
Car la moi je l'appelle via le load du form mais bon pas terrible
Vous n’avez pas trouvé la réponse que vous recherchez ?
NHenry
Messages postés15156Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention29 septembre 2024159 13 mai 2012 à 15:06
Bonjour,
En .NET, il y a pas d'indexation, et encore moins de Winsock, TcpClient et TcpListener sont suffisant.
Tu peux faire une classe, contenant le TcpClient (définit avec un constructeur paramétré).
Ensuite, tu accèderas à des membres de cette classe comme par exemple :
- EnvoyerMessage
- GetPseudo
- ...
Ensuite, elle pourra avoir des évènements :
- MessageReçu
- Client déconnecté
- ...
Pour déclarer la collection (dans un module par exemple) :
Public MaListeDeClients As List(Of MaClasse)=New List(Of MaClasse)
Pour ajouter une instance :
Dim MonObjet as MaClasse= New MaClasse(MonTcpClient)
MaListeDeClients.Add(MonObjet)
AddHandler MonObjet.MonEvent, New Delegate...(AddressOf ...)
Pour envoyer un message à tous les clients :
For Each lClient as MaClasse In MaListeDeClients
lClient.SendMessage(MonMessage)
Next
---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualVasic (onglet Références dans les propriétés du projet).
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list ---
NHenry
Messages postés15156Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention29 septembre 2024159 5 mai 2012 à 16:28
Bonjour,
Car tu ne décrémentes jamais : counter
Il faut le faire quand le client se déconnecte.
---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualVasic (onglet Références dans les propriétés du projet).
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list ---
NHenry
Messages postés15156Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention29 septembre 2024159 28 avril 2012 à 14:59
Bonjour,
en .NET, on utilise pas le composant winsock, mais l'espace de nom System.Net.Sockets et notamment les classes TcpListener et TcpClient.
---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualVasic (onglet Références dans les propriétés du projet).
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list ---
tonyledragon
Messages postés173Date d'inscriptionlundi 2 mai 2011StatutMembreDernière intervention13 décembre 20121 2 mai 2012 à 15:42
Ok,merci j'aimerais savoir si il existe un Tutorial détailler d'une connexion multi client avec les sockets que je puisse comprendre leur fonctionnement ?
NHenry
Messages postés15156Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention29 septembre 2024159 3 mai 2012 à 13:57
Bonjour,
Cela existe, je pense, mais en cherchant un peu, tu trouveras pas mal d'exemple.
---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualVasic (onglet Références dans les propriétés du projet).
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list ---
tonyledragon
Messages postés173Date d'inscriptionlundi 2 mai 2011StatutMembreDernière intervention13 décembre 20121 4 mai 2012 à 16:45
C'est pas des exemple que je veux enfin si mais des exemples bien expliquer car quand je voie des codes certe j'essaye les comprendre mais je comprend pas et j'ai trouve des 100 ene de code tous différent les un des autres a force je ne sais plus comment ou quel fonction utilise pour mon serveur
tonyledragon
Messages postés173Date d'inscriptionlundi 2 mai 2011StatutMembreDernière intervention13 décembre 20121 5 mai 2012 à 11:38
Salut voila je up car j'aimerais vraiment de l'aide j'ai fait un grand effort j'ai essayer par moi même avec mes petit connaissance a faire quelque chose de correct donc je suis arriver a faire une connexion avec un client basique comment puis-je accepter plusieurs client et surtout si quelque peut m'aider a dev le code. voici le code :
Client
Imports System.Net
Imports System.Net.Sockets
Class Form1
Dim clientsocket As New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
Dim hostip As IPAddress = IPAddress.Parse("192.168.1.10")
Dim hostport As Integer = 4000
clientsocket.Connect(New IPEndPoint(hostip, hostport))
End Sub
End Class
Coter Serveur :
Imports System.Net
Imports System.Net.Sockets
Public Class Form1
Dim listensocket As New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
Dim hostip As IPAddress = IPAddress.Parse("192.168.1.10")
Dim hostport As Integer = 4000
listensocket.Bind(New IPEndPoint(hostip, hostport))
listensocket.Listen(3)
listensocket.BeginAccept(AddressOf connexioncallback, listensocket)
End Sub
Private Sub connexioncallback(ByVal asyncresult As IAsyncResult)
MsgBox("Connexion etablie")
End Sub
End Class
Ce code fonctionne mais pour la 1er connexion.
Merci d'avance
tonyledragon
Messages postés173Date d'inscriptionlundi 2 mai 2011StatutMembreDernière intervention13 décembre 20121 5 mai 2012 à 15:46
Salut voila c'est vrai c'est plus simple je trouve maitenant j'ai essayer avec le serveur comme ceci :
Imports System.Net.Sockets.TcpListener
Imports System.Net
Imports System.Net.Sockets
Public Class Form1
Dim serversocket As New TcpListener(IPAddress.Parse("192.168.1.10"), 4000)
Dim clientsocket As TcpClient
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
Dim counter As Integer = 0
serversocket.Start()
While (True)
counter += 1
clientsocket = serversocket.AcceptTcpClient
MsgBox("clientsocket n°" + Convert.ToString(counter) + "-- connexion")
End While
clientsocket.Close()
serversocket.Stop()
End Sub
End Class
Avec ce code le client peut se connecté sans aucun problème plusieurs fois il détecte tout
Me reste plus cas modifier le client juste pouvez vous me dire si c'est correcte ?
NHenry
Messages postés15156Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention29 septembre 2024159 5 mai 2012 à 16:08
Bonjour,
Au lieu de faire la réception des clients dans un Form1_Load, essayes plutôt de le faire dans un thread (BackGroundWorker et System.Threading.Thread).
---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualVasic (onglet Références dans les propriétés du projet).
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list ---
tonyledragon
Messages postés173Date d'inscriptionlundi 2 mai 2011StatutMembreDernière intervention13 décembre 20121 5 mai 2012 à 16:20
Ok juste pour information j'ai remarquer que si tu connecté 15 client ben il dit 15 connecte tu en déconnecte par exemple 2 tu en reconnecte 1 il dit 16 client je voulais savoir si c’était grave qu'il charge plusieurs client en 1 + 1 ou il y a un moyen tester les sockets et d'attribuer une socket vide ?
J'ai réaliser le code serveur comme ceci :
Imports System.Net.Sockets.TcpListener
Imports System.Net
Imports System.Net.Sockets
Public Class Form1
Dim serversocket As New TcpListener(IPAddress.Parse("192.168.1.10"), 4000)
Dim clientsocket As TcpClient
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
coclient.RunWorkerAsync()
End Sub
Private Sub coclient_DoWork(sender As System.Object, e As System.ComponentModel.DoWorkEventArgs) Handles coclient.DoWork
Dim counter As Integer = 0
serversocket.Start()
While (True)
counter += 1
clientsocket = serversocket.AcceptTcpClient
MsgBox("clientsocket n°" + Convert.ToString(counter) + "-- connexion")
End While
clientsocket.Close()
serversocket.Stop()
End Sub
End Class
et le code client comme ceci pour le moment
Imports System.Net.Sockets.TcpClient
Imports System.Net
Imports System.Net.Sockets
Class Form1
Dim clientsocket = New TcpClient("192.168.1.10", 4000)
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
End Sub
End Class
tonyledragon
Messages postés173Date d'inscriptionlundi 2 mai 2011StatutMembreDernière intervention13 décembre 20121 5 mai 2012 à 16:35
Oui mais j'ai une question dans ce systeme :
Exemple
12 client connecté
le client n°5 ce déconnexion
donc on décrémentes sa fait donc 12 -1 = 11 client
1 client ce connecte sa remonte a 12 mais le problème et que
il y aurez 2 client en ID 12 non ?
tonyledragon
Messages postés173Date d'inscriptionlundi 2 mai 2011StatutMembreDernière intervention13 décembre 20121 5 mai 2012 à 18:50
Re bonjour,J'ai oublier une question la plus importante comment puis-je recepetionner les messages y a t'il un moyen spécial a part la commande receive ?
tonyledragon
Messages postés173Date d'inscriptionlundi 2 mai 2011StatutMembreDernière intervention13 décembre 20121 7 mai 2012 à 19:37
Salut,Voila je revien la car avec toute la bonne volonté que j'ai je n'arrive point a avancer ou c'est moi qui comprend rien ou sinon c'est que je peut réviser mon visual basic d'un cote je débarque de vb6 donc dur de me mettre comme sa d'un coup au vb.net bref passon
Aurez tu un code pour la fonction receivre ?
NHenry
Messages postés15156Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention29 septembre 2024159 7 mai 2012 à 20:40
Bonjour,
Quel est ton code de réception actuellement ?
---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualVasic (onglet Références dans les propriétés du projet).
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list ---
tonyledragon
Messages postés173Date d'inscriptionlundi 2 mai 2011StatutMembreDernière intervention13 décembre 20121 8 mai 2012 à 20:21
J'ai juste rajouter
Public Function ReceiveFrom()
End Function
Je sais pas trop vers ou me tourné pour savoir comment va être réceptionner les donnée et comment la function va s'appeler quand un client envoie des données