[VB.NET] Client/Serveur Socket
Bonjour,
Voila j'ai un projet dans mon entreprise. Celui-ci est le suivant, j'ai une application cliente avec un simple bouton(connecter). A l'action de celui-ci ,il envoie le mot de passe et login de l'utilisateur au serveur qui possède toute les méthodes pour récupérer toute les informations de l'utilisateur utilisateur. Donc le serveur doit renvoyer un objet nommé utilisateur avec comme paramètre (id,login,username,adressemail). Pour réaliser ceci j'ai créer 4 classes :
- ClientTCP
-ServerTcp
-Paquet : pour récuperer l'objet et l'envoyer
-PaquetManager
Voici mes classes :
ClientTcp
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 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
|
Dim MonSocketClient As Socket
Dim MonThread As Thread
Public Function Connect() As String
Dim reponse As String = String.Empty
Dim AddresseServeur As String = ""
Dim numeroPort As Integer = 0
Dim user As String = ""
Dim password As String = ""
Try
'Initialise Socket
MonSocketClient = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
'On récupère les informations de connexion
Dim liste As New List(Of String)
liste = RecupereInformationConnecion(AddresseServeur, numeroPort, user, password)
AddresseServeur = liste.ElementAt(0)
numeroPort = CType(liste.ElementAt(1), Integer)
user = liste.ElementAt(2)
password = liste.ElementAt(3)
Console.WriteLine(AddresseServeur & " " & numeroPort)
'Entre les informations de connexion
Dim monEP As IPEndPoint = New IPEndPoint(IPAddress.Parse(AddresseServeur), numeroPort)
Console.WriteLine(AddresseServeur & " " & numeroPort)
MonSocketClient.Connect(monEP)
'Envoie le Password et User
Dim u As Boolean = True
u = SendConnect(user + ";" + password)
If u = True Then
reponse = " Fin de connexion "
Else
reponse = " Erreur lros de l'envoi"
End If
ThreadLecture(AddresseServeur, numeroPort)
Catch ex As Exception
reponse = "Erreur de connexion"
Console.WriteLine(ex.Message)
End Try
Console .WriteLine (reponse )
Return reponse
End Function
Private Function RecupereInformationConnecion(ByVal AddresseServeur As String, ByVal numeroPort As Integer, ByVal user As String, ByVal password As String) As List(Of String)
Dim liste As New List(Of String)
Dim value As String = ""
value = ConfigurationManager.AppSettings.Get("Authentification")
Dim valeur() As String
valeur = value.Split(";")
AddresseServeur = valeur(0)
AddresseServeur = AddresseServeur.Replace("Server=", "")
liste.Add(AddresseServeur)
Dim temporairePort As String = valeur(1)
temporairePort = temporairePort.Replace("Port=", "")
numeroPort = CType(temporairePort, Integer)
liste.Add(numeroPort)
user = valeur(2)
user = user.Replace("User=", "")
liste.Add(user)
password = valeur(3)
password = password.Replace("Password=", "")
liste.Add(password)
Return liste
End Function
Private Function SendConnect(ByVal InfoConnection As String) As Boolean
Dim reponse As Boolean = True
Try
Dim message() As Byte
message = Encoding.UTF8.GetBytes(InfoConnection)
Dim Envoi As Integer = 0
Envoi = MonSocketClient.Send(message)
Catch ex As Exception
reponse = False
End Try
Console.WriteLine("vjldfbvl")
Return reponse
End Function
Private Sub ThreadLecture(ByVal adresse As String, ByVal port As String)
Try
Dim listener As TcpListener = New TcpListener(IPAddress.Parse(adresse), port)
listener.Start()
While True
Dim client As TcpClient = listener.AcceptTcpClient()
Dim ts As ParameterizedThreadStart = New ParameterizedThreadStart(AddressOf AcceptConnection)
Dim MonThread As Thread = New Thread(ts)
MonThread.Start()
End While
Catch ex As Exception
Console.WriteLine(ex.Message)
End Try
End Sub
Private Sub AcceptConnection(ByVal obj As Object)
Try
Dim utilisateur As New User
Dim client As TcpClient = CType(obj, TcpClient)
Dim stream As NetworkStream = client.GetStream
Dim paquet As New Paquet
paquet = paquet.Receive(stream)
Dim ap As PaquetManager
ap = CType(paquet, PaquetManager)
Catch ex As Exception
Console.WriteLine(ex.Message)
End Try
End Sub |
ServeurTcp
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 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
|
Dim port As Integer = 5100
Dim auth As AuthManager
Public Sub StartServeur()
Dim listener As TcpListener = New TcpListener(IPAddress.Any, port)
listener.Start()
While True
Dim client As TcpClient = listener.AcceptTcpClient()
Dim ts As ParameterizedThreadStart = New ParameterizedThreadStart(AddressOf AcceptConnection)
Dim MonThread As Thread = New Thread(ts)
MonThread.Start()
End While
End Sub
Private Function TraitementConnexion(ByVal SocketEnvoi As Socket) As User
Dim utilisateur As New User
Dim tabByte() As Byte
Dim recu As Integer
'Récupère le message
recu = SocketEnvoi.Receive(tabByte)
'Traduit en string
Dim chaine As String = Encoding.UTF8.GetString(tabByte)
chaine.Substring(0, recu)
Dim tab() As String = chaine.Split(";")
Dim user As String = tab(0)
Dim password As String = tab(1)
utilisateur = auth.Connect(user, password)
Dim stream As NetworkStream
Return utilisateur
End Function
Private Sub AcceptConnection(ByVal obj As Object)
Try
Dim utilisateur As New User
Dim client As TcpClient = CType(obj, TcpClient)
Dim stream As NetworkStream = client.GetStream
Dim paquet As New Paquet
paquet = paquet.Receive(stream)
Dim chaine As String = paquet.ToString
Console.WriteLine(chaine)
Dim tab() As String = chaine.Split(";")
Dim user As String = tab(0)
Dim password As String = tab(1)
'renvoi l'utilisateur avec ce login et password
utilisateur = auth.Connect(user, password)
Dim ap As PaquetManager = New PaquetManager(utilisateur)
paquet.Send(ap, stream)
Catch ex As Exception
Console.WriteLine(ex.Message)
End Try
End Sub |
Paquet
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 28 29 30 31 32 33 34 35 36 37 38
|
Public Enum TypePaquet
Authentification
End Enum
<Serializable()> Public Class Paquet
Private _type As TypePaquet
Public Property TYPE() As TypePaquet
Get
Return _type
End Get
Set(ByVal value As TypePaquet)
_type = value
End Set
End Property
Public Sub Paquet(ByVal typePa As TypePaquet)
_type = typePa
End Sub
Public Sub Send(ByVal paquet As Paquet, ByVal stream As Stream)
Dim bf As New BinaryFormatter
bf.Serialize(stream, paquet)
stream.Flush()
End Sub
Public Function Receive(ByVal stream As NetworkStream) As Paquet
Dim p As New Paquet
p = Nothing
Dim bf As New BinaryFormatter
p = CType(bf.Deserialize(stream), Paquet)
Return p
End Function
End Class |
PaquetManager
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
<Serializable()> Public Class PaquetManager
Inherits Paquet
Private _user As User
Public Property USER() As User
Get
Return _user
End Get
Set(ByVal value As User)
_user = value
End Set
End Property
Public Sub New(ByVal us As User)
_user = us
End Sub
End Class |
Voila voila mais mon code ne marche pas du tout et j'ai beau chercher et essayer des choses je n'y arrive pas . Pouvez vous m'aider a réussir cette fonctionnalité?
PS: J'ai réussi a créer un chat pour m’entraîner qui fonctionne mais je pense que le problème est d'envoyer et recevoir des objets..
Cordialement,
Kévin