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

Résolu
Utilisateur anonyme - 24 mars 2014 à 22:07
 Utilisateur anonyme - 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.

1 réponse

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 !
0