Utilisation des sockets [Résolu]

Messages postés
90
Date d'inscription
mercredi 21 novembre 2007
Statut
Membre
Dernière intervention
25 mai 2013
- - Dernière réponse : djedjeska
Messages postés
90
Date d'inscription
mercredi 21 novembre 2007
Statut
Membre
Dernière intervention
25 mai 2013
- 30 mars 2012 à 01:39
Bonjour à tous,

je me familiarise depuis peu avec les sockets, car j'ai fait une petite application qui nécessite l'envoi de données entre deux ordinateurs.

J'ai donc lu beaucoup de sources et cherché sur plusieurs pages internet, mais je bloque sur un point.

J'ai créé une petite application pour tester l'utilisation des sockets, avec 2 boutons pour le serveur, deux boutons pour le client.

J'utilise un cable réseau pour relier mes deux ordis (je ne passe donc pas par internet), et j'essaye avec le premier ordi (serveur) d'envoyer une phrase, et de la récupérer avec le deuxième ordi.

Voila mon code :

Imports System.Net
Imports System.Net.Sockets
Imports System.Text

Public Class Form1


Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
MonSocket = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
MsgBox("Socket créé.")
MonSocket.Connect("LocalHost", "445")
MsgBox("Connexion établie du serveur sur lui même.")
End Sub


Private Sub Button5_Click(sender As System.Object, e As System.EventArgs) Handles Button5.Click
MonSocket = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
MsgBox("Socket créé.")
MonSocket.Connect("192.168.1.5", "445")
MsgBox("Connexion établie du client sur le serveur.")
End Sub

Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
Dim msg As Byte() = Encoding.UTF8.GetBytes("This is a test")
Dim NombreDeBytes As Integer = MonSocket.Send(msg, 0, msg.Length, SocketFlags.None)
MsgBox("Données envoyées : " & NombreDeBytes)
End Sub

Private Sub Button3_Click(sender As System.Object, e As System.EventArgs) Handles Button3.Click
MonSocket.ReceiveTimeout = 5000
Dim MesBytes(255) As Byte
Dim NombreDeBytes As Integer = MonSocket.Receive(MesBytes, 0, MonSocket.Available, SocketFlags.None)
MsgBox("Données reçues : " & NombreDeBytes)
Dim Result As String = Encoding.UTF8.GetString(MesBytes)
MsgBox(Result)

End Sub

Private Sub Form1_DoubleClick(sender As Object, e As System.EventArgs) Handles Me.DoubleClick
MsgBox(MonSocket.Connected)
End Sub


End Class


Le premier ordi appuie sur le bouton "Je suis le serveur", et se connecte sur lui même

Le deuxième ordi appuie sur le bouton "Je suis un client", et se connecte sur le serveur

Le premier ordi envoie la phrase

Puis le deuxième ordi appuie sur "recevoir" et rien ne se passe...


Pourriez vous m'éclairer un peu SVP ?

Merci d'avance !
Afficher la suite 

12 réponses

Meilleure réponse
Messages postés
14570
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
22 octobre 2019
136
3
Merci
Bonjour,

Sinon, tu as aussi cette source :
http://www.vbfrance.com/code.aspx?ID=36083

Désolé, mais je manque un peu de temps la semaine.

---------------------------------------------------------------------
[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
---
Mon site

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 197 internautes nous ont dit merci ce mois-ci

Commenter la réponse de NHenry
Messages postés
90
Date d'inscription
mercredi 21 novembre 2007
Statut
Membre
Dernière intervention
25 mai 2013
0
Merci
J'ai oublié de mettre des couleurs...

Voila le code :

Imports System.Net
Imports System.Net.Sockets
Imports System.Text

Public Class Form1


Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
MonSocket = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
MsgBox("Socket créé.")
MonSocket.Connect("LocalHost", "445")
MsgBox("Connexion établie du serveur sur lui même.")
End Sub


Private Sub Button5_Click(sender As System.Object, e As System.EventArgs) Handles Button5.Click
MonSocket = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
MsgBox("Socket créé.")
MonSocket.Connect("192.168.1.5", "445")
MsgBox("Connexion établie du client sur le serveur.")
End Sub

Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
Dim msg As Byte() = Encoding.UTF8.GetBytes("This is a test")
Dim NombreDeBytes As Integer = MonSocket.Send(msg, 0, msg.Length, SocketFlags.None)
MsgBox("Données envoyées : " & NombreDeBytes)
End Sub

Private Sub Button3_Click(sender As System.Object, e As System.EventArgs) Handles Button3.Click
MonSocket.ReceiveTimeout = 5000
Dim MesBytes(255) As Byte
Dim NombreDeBytes As Integer = MonSocket.Receive(MesBytes, 0, MonSocket.Available, SocketFlags.None)
MsgBox("Données reçues : " & NombreDeBytes)
Dim Result As String = Encoding.UTF8.GetString(MesBytes)
MsgBox(Result)

End Sub

Private Sub Form1_DoubleClick(sender As Object, e As System.EventArgs) Handles Me.DoubleClick
MsgBox(MonSocket.Connected)
End Sub


End Class 
Commenter la réponse de djedjeska
Messages postés
14570
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
22 octobre 2019
136
0
Merci
Bonjour,

En .NET, lire le point 3 de ma signature.
MsgBox -> MessageBox;Show

Quel est le problème ?

---------------------------------------------------------------------
[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
---
Mon site
Commenter la réponse de NHenry
Messages postés
90
Date d'inscription
mercredi 21 novembre 2007
Statut
Membre
Dernière intervention
25 mai 2013
0
Merci
Et bien, l'ordinateur client ne reçoit pas le message, alors qu'il semble correctement connecté sur le serveur, et que j'ai envoyé des données avec l'ordinateur serveur...

J'ai donc un problème avec socket.receive...

(Pour le point 3 j'ai pas trop compris... Ca change quoi ??)
Commenter la réponse de djedjeska
Messages postés
14570
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
22 octobre 2019
136
0
Merci
Bonjour,

Le point 3 c'est les conseils pour bien coder en .NET, la base.
As-tu regardé avec un WireShark pour être sûr de la localisation du pb ?

MonSocket.Available donne quoi ?

---------------------------------------------------------------------
[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
---
Mon site
Commenter la réponse de NHenry
Messages postés
90
Date d'inscription
mercredi 21 novembre 2007
Statut
Membre
Dernière intervention
25 mai 2013
0
Merci
Non... Je ne sais pas ce que c'est, je vais chercher un peu
Commenter la réponse de djedjeska
Messages postés
90
Date d'inscription
mercredi 21 novembre 2007
Statut
Membre
Dernière intervention
25 mai 2013
0
Merci
Le Available me renvoie 0 que ce soit du côté serveur que du côté Client.
D'autre part, j'ai mis un ReceiveTimeOut, et au bout des 5 secondes il me met que l'hôte distant n'a pas répondu
Commenter la réponse de djedjeska
Messages postés
90
Date d'inscription
mercredi 21 novembre 2007
Statut
Membre
Dernière intervention
25 mai 2013
0
Merci
J'ai essayé d'utiliser WireShark, mais c'est du charabia pour moi...
En tout cas d'après les lignes qu'il m'affiche, il y a bien une connexion entre les adresses de mes deux ordis : 192.168.1.5 et 192.168.1.10, mais peu importe ce que j'essaye, je ne reçois jamais la chaîne que j'envoie...

Personne ne s'y connait en Sockets ?
Commenter la réponse de djedjeska
Messages postés
50
Date d'inscription
lundi 7 novembre 2011
Statut
Membre
Dernière intervention
22 juillet 2012
0
Merci
autre astuce via CMD.EXE

- 1 ) ouvrir cmd.exe ou cherchher l'invite de commende windows
- 2 ) taper netstat 1 (ou 1 peut être augmenté , cherchez plus d'info sur commande DOS)
- 3 ) lancer les applications et simulé l'envoi de données
- 4 ) regarder ce qui se passe dans l'invite de commande
Commenter la réponse de xXInfinityNefasteXx
Messages postés
50
Date d'inscription
lundi 7 novembre 2011
Statut
Membre
Dernière intervention
22 juillet 2012
0
Merci
pour un exemple complet de la classe socket me contacter par MP
Commenter la réponse de xXInfinityNefasteXx
Messages postés
50
Date d'inscription
lundi 7 novembre 2011
Statut
Membre
Dernière intervention
22 juillet 2012
0
Merci
Très bonne exemple , bravo pour ce tutorial ! encore merci
Commenter la réponse de xXInfinityNefasteXx
Messages postés
90
Date d'inscription
mercredi 21 novembre 2007
Statut
Membre
Dernière intervention
25 mai 2013
0
Merci
Merci beaucoup pour vos réponses !

En fait j'ai trouvé une alternative en utilisant des beginconnect et beginsend etc.

A mon avis mon probleme venait du fait que je ne "réutilisais" pas un socket envoyé par le client.

Le serveur se connecte et se met en écoute
Le client demande la connexion
Le serveur accepte et j'obtiens un nouveau socket que j'utilise pour faire des envois...

Enfin ça reste encore à éclaircir mais ça marche très bien.

Merci de votre aide
Commenter la réponse de djedjeska