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
ServeurTcp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
Paquet
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
PaquetManager
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
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é?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
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
Partager