Problème Envoi/reception de donnee par socket
Bonjours ! !
Je ne sais pas si je doit être content de vous revoir...:roll::lol:
Après voir résolu mon problème de la dernière fois j'avais continuer, j'avais établis un envoi/réception de texte par le socket, et abracadabra ! 30min après sa ne marche plus...je ne crois pas avoir toucher quelque chose, alors je vous demande de vérifier mon code, peut-être vous verrez l'erreur que je n’ai pas vu...
Je demande connexion au serveur a partir du client
Le serveur en écoute accepte la connexion
Le client converti une phrase en Bytes et j’envoie
Le serveur reçoit et retranscrit en String et l'affiche
Je vous donne le code et après je vous explique ce que j'ai tester
Parti Client :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim ipAddr As System.Net.IPAddress
ipAddr = IPAddress.Parse("127.0.0.1")
SocketClient = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
SocketClient.BeginConnect(New IPEndPoint(ipAddr, 80), AddressOf connexionConnectCallback, SocketClient)
End Sub
Private Sub connexionConnectCallback(ByVal asyncResult As IAsyncResult)
Dim SocketConnect As Boolean = False
Dim Width As String
Dim Height As String
Try
SocketClient.EndConnect(asyncResult)
Width = System.Windows.Forms.Screen.PrimaryScreen.Bounds.Width.ToString()
Height = System.Windows.Forms.Screen.PrimaryScreen.Bounds.Height.ToString()
Dim msgwidth As Byte() = Encoding.UTF8.GetBytes(Width & "/")
Dim envoiwidth As Integer = SocketClient.Send(msgwidth, 0, msgwidth.Length, SocketFlags.None)
Dim msgheight As Byte() = Encoding.UTF8.GetBytes(Height & "/")
Dim envoiheight As Integer = SocketClient.Send(msgheight, 0, msgheight.Length, SocketFlags.None)
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub |
Parti serveur:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim ipAddr As System.Net.IPAddress
SocketServer = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
ipAddr = IPAddress.Parse("127.0.0.1")
SocketServer.Bind(New IPEndPoint(ipAddr, 80))
SocketServer.Listen(5)
Me.SocketServer.BeginAccept(AddressOf connexionCallback, Me.SocketServer)
End Sub
Private Sub connexionCallback(ByVal asyncResult As IAsyncResult)
Dim SocketConnected As Boolean = Me.SocketServer.Connected
Try
Dim textlabel As String
Dim bytes(255) As Byte
SocketServer = SocketServer.EndAccept(asyncResult)
SocketServer.Receive(bytes, 0, SocketServer.Available, SocketFlags.None)
Dim DonneeRecu = Encoding.UTF8.GetString(bytes)
Msgbox(DonneeRecu, 0, "test")
Dim Labelmodif As Label
Labelmodif = Label1
textlabel = "Le client est connecté"
majlabel(Labelmodif, textlabel)
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub |
Donc...Voici le code, donc j'ai tester ( a l'aide de msgbox juste après certaines opération )
Coté client :
- Après définition variable : Ok ( Width : XXX, Height : XXX )
- Après cryptage en bytes : "L'argument 'Prompt' ne peut pas être convertie en type 'String'."
Donc normalement coté client tous ce passe comme il faut...Mise a part la lecture du cryptage mais sa me parait normal...
Coté serveur :
- Après réception des bytes : Le même message qu'avant "L'argument 'Prompt' ne peut....." Encore normal
- J'ai enregistrer la fonction receive dans une variable ( Elle renvoie le nombre d'octets reçu normalement )
Code:
Dim test As Integer = SocketServer.Receive(bytes, 0, SocketServer.Available, SocketFlags.None)
Je test avec msgbox: 0
- Après retranscription/décodage : Vide :s
Donc l'erreur se démontre que du coté serveur mais je ne sais pas si c'est a la réception ou a l'envoi qu'est le problème..
Merci d'avance du temps que vous m'accordé
Je suis un peu perdu...