Utilisation des sockets

Résolu
djedjeska Messages postés 90 Date d'inscription mercredi 21 novembre 2007 Statut Membre Dernière intervention 25 mai 2013 - 28 mars 2012 à 18:21
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 !

12 réponses

NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
28 mars 2012 à 23:56
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
3
djedjeska Messages postés 90 Date d'inscription mercredi 21 novembre 2007 Statut Membre Dernière intervention 25 mai 2013
28 mars 2012 à 18:28
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 
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
28 mars 2012 à 19:01
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
0
djedjeska Messages postés 90 Date d'inscription mercredi 21 novembre 2007 Statut Membre Dernière intervention 25 mai 2013
28 mars 2012 à 19:10
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 ??)
0

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

Posez votre question
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
28 mars 2012 à 19:46
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
0
djedjeska Messages postés 90 Date d'inscription mercredi 21 novembre 2007 Statut Membre Dernière intervention 25 mai 2013
28 mars 2012 à 20:00
Non... Je ne sais pas ce que c'est, je vais chercher un peu
0
djedjeska Messages postés 90 Date d'inscription mercredi 21 novembre 2007 Statut Membre Dernière intervention 25 mai 2013
28 mars 2012 à 20:07
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
0
djedjeska Messages postés 90 Date d'inscription mercredi 21 novembre 2007 Statut Membre Dernière intervention 25 mai 2013
28 mars 2012 à 22:58
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 ?
0
xXInfinityNefasteXx Messages postés 48 Date d'inscription lundi 7 novembre 2011 Statut Membre Dernière intervention 22 juillet 2012
28 mars 2012 à 23:32
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
0
xXInfinityNefasteXx Messages postés 48 Date d'inscription lundi 7 novembre 2011 Statut Membre Dernière intervention 22 juillet 2012
28 mars 2012 à 23:33
pour un exemple complet de la classe socket me contacter par MP
0
xXInfinityNefasteXx Messages postés 48 Date d'inscription lundi 7 novembre 2011 Statut Membre Dernière intervention 22 juillet 2012
29 mars 2012 à 01:30
Très bonne exemple , bravo pour ce tutorial ! encore merci
0
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
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
0
Rejoignez-nous