Envoi de données non autorisée car le socket n'est pas connecté [Résolu]

CLeBeR_FR 301 Messages postés mercredi 22 septembre 2010Date d'inscription 27 février 2018 Dernière intervention - 24 mars 2014 à 22:07 - Dernière réponse : CLeBeR_FR 301 Messages postés mercredi 22 septembre 2010Date d'inscription 27 février 2018 Dernière intervention
- 26 mars 2014 à 16:40
Bonjour,
j'essaie de créer une application client/serveur pour effectuer des actions à distance (dans un premier temps en local). J'ai donc crée ce code pour le client :

Sub Connexion()
Dim port As String = "8080"
Dim ip As String = "127.0.0.1"
Dim MonSocketClient As New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
Dim MonEP As IPEndPoint = New IPEndPoint(IPAddress.Parse(ip), 8080)
MonSocketClient.Connect(MonEP)
Dim MesBytes(255) As Byte
Dim BytesRecus As Integer = MonSocketClient.Receive(MesBytes)
Dim MonString As String = System.Text.Encoding.ASCII.GetString(MesBytes)
MsgBox(MonString)
MonSocketClient.Close()
End Sub

Private Sub FormClient_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim ThreadConnexion As New Threading.Thread(AddressOf Connexion)
ThreadConnexion.Start()
End Sub

Ainsi que le code suivant pour le serveur :

Sub Connexion()
Dim port As String = "8080"
Dim ip As String = "127.0.0.1"
Dim MonSocketServeur As New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
Dim MonEP As IPEndPoint = New IPEndPoint(IPAddress.Parse(ip), 8080)
MonSocketServeur.Bind(MonEP) 'Lie le socket à cette IP
MonSocketServeur.Listen(1) 'Se met en mode écoute
Dim SocketEnvoi As Socket = MonSocketServeur.Accept() 'Bloquant tant que pas de connexion
Dim MesBytes As Byte() = System.Text.Encoding.ASCII.GetBytes("Bonjour")
Dim BytesEnvoyes As Integer = MonSocketServeur.Send(MesBytes)
MonSocketServeur.Close()
End Sub
Private Sub FormServeur_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim ThreadConnexion As New Threading.Thread(AddressOf Connexion)
ThreadConnexion.Start()
End Sub

Donc le but est de faire apparaitre un messagebox sur mon client avec le texte que le serveur a envoyé. Le problème c'est que lorsque j'envoie les Bytes avec mon serveur, j'obtiens l'erreur suivante :

"Une requête d'envoi ou de réception de données n'a pas été autorisée car le socket n'est pas connecté et (lors de l'envoi sur un socket datagramme en utilisant un appel sendto) aucune adresse n'a été fournie" à la ligne :

Dim BytesEnvoyes As Integer = MonSocketServeur.Send(MesBytes)

J'ai vu que l'on pouvait mettre des arguments de mémoire tampon avec la commande Send mais dans l'exemple que j'ai trouvé, il n'y a aucun paramètre supplémentaire.
Quelqu'un saurait-il d'où vient le problème ?
Merci.
Afficher la suite 

Votre réponse

1 réponse

CLeBeR_FR 301 Messages postés mercredi 22 septembre 2010Date d'inscription 27 février 2018 Dernière intervention - Modifié par FaonManager le 26/03/2014 à 16:41
0
Merci
Bonjour,
Il fallait utiliser SocketEnvoi pour envoyer MesBytes, donc:
Dim BytesEnvoyes As Integer = SocketEnvoi.Send(MesBytes)
à la place de
Dim BytesEnvoyes As Integer = MonSocketServeur.Send(MesBytes)

Merci !
Commenter la réponse de CLeBeR_FR

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.