Bonjour j'ai un petit problème avec une appli que l'on doit fait au lycée, un mini chat.
Le voudrais que lorsque l'on appuis sur un bouton connexion cela se connecte au serveur, que cela demande si le login est libre, et demande la liste des login connecter.
Voila ce que j'ai fait:
Je suis sous C++Builder6
Code C/C++ :
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 void __fastcall TForm1::ButtonConnexionClick(TObject *Sender) { AnsiString Envoi; AnsiString LaLigne =""; Connexion(); Sleep(100); do { LaLigne = ClientSocket1 ->Socket ->ReceiveText(); }while((!SauvegardeLigne(LaLigne)) && LaLigne == NULL); if (TraitementLigne()) { ClientSocket1 ->Socket ->SendText(Envoi.sprintf("%d%s%d",'L',EditLogin ->Text,'\x04' ) ); Sleep(100); do { LaLigne = ClientSocket1 ->Socket ->ReceiveText(); }while((!SauvegardeLigne(LaLigne)) && LaLigne ==""); if (TraitementLigne()) { ClientSocket1 ->Socket ->SendText(Envoi.sprintf("%d%d",'*','\x04') ); Sleep(100); do { LaLigne = ClientSocket1 ->Socket ->ReceiveText(); }while((!SauvegardeLigne(LaLigne)) && LaLigne ==""); if (TraitementLigne()) { // } else { ListBoxMessage ->Items -> Add("Erreur de reception des login"); Deconnexion(); } } } else { ListBoxMessage ->Items -> Add("Reception imcomplette"); Deconnexion(); } } void TForm1::Deconnexion() { ButtonConnexion->Enabled = true; EditIP->Enabled = true; EditPort->Enabled = true; EditLogin->Enabled = true; ButtonDeconnexion->Enabled = false; ClientSocket1 ->Active = true; } void TForm1::Connexion() { ButtonConnexion->Enabled = false; EditIP->Enabled = false; EditPort->Enabled = false; EditLogin->Enabled = false; ButtonDeconnexion->Enabled = true; ClientSocket1 ->Address = EditIP ->Text ; ClientSocket1 ->Port = EditPort ->Text.ToInt() ; ClientSocket1 ->Active = true; } bool TForm1::SauvegardeLigne(AnsiString LaLigne) { int Nb = LaLigne.Length() ; if (LaLigne.SubString(Nb-1,1)== '\x04') { Ligne += LaLigne; return true; } else Ligne += LaLigne; return false; } bool TForm1::TraitementLigne() { int Nb = Ligne.Length(); AnsiString Car = Ligne.SubString(1,1); if (Car == 'C') { ListBoxMessage ->Items-> Add("Connecter"); return true; } if (Car == '0') { ListBoxMessage ->Items->Add("Login accepté"); return true; } if (Car == '1') { ListBoxMessage->Items -> Add("Login deja existant, veuillez en changer"); ListBoxMessage->Items -> Add("Deconnexion"); Deconnexion(); return false; } }
Mon problème c'est qu'a la ligne :
LaLigne = ClientSocket1 ->Socket ->ReceiveText();
Je reçois rien du tout,
J''ai peut être encore des prob de gestion des booléens, mais c'est pas le problème.
Le serveur me connecte bien et lors de la connexion accepter il me revoie la ligne
'C''\x04' Le caractère C plus EOT.
Au lycée j'ai réussi cela marche mais en utilisant l'évènement de réception. Mais a moins de gérer le tout avec des sémaphore il me faut un bouton pour se connecter un autre pour se loger et un autre pour la liste des connecter. je voulais éviter sa pour la connexion. Puis après utilisé l'évènement, la j'aurais pas le choix pour la réception des messages.
Merci de votre aide pour comprendre mon erreur
Technicien en électricité industriel (39 ans). En cours de reconversion par un BTS IRIS 2éme année.Actuellement en cours.
Partager