C++ Builder quelques question

cs_megamario Messages postés 145 Date d'inscription lundi 15 juin 2009 Statut Membre Dernière intervention 14 février 2013 - 11 nov. 2009 à 16:56
dragonjoker59 Messages postés 92 Date d'inscription samedi 26 mars 2005 Statut Membre Dernière intervention 23 septembre 2015 - 15 févr. 2010 à 12:11
Bonjour,

J'aurais besoin de quelque petit renseignement sous C++builder 6

1er:
On fait un mini chat au lycée et je voudrais savoir comment reconnaitre et sauvegarder du coup dans une variable la ligne sélectionnée dans une listebox.

2eme:
Actuellement on fait le client. Les prof nous on donner le serveur.
Pour se faire il faut que:
1)On se connecte au serveur.
2)On demande au serveur un si le login que j'ai rentré n'est pas utilisé.
3)On demande la liste des connectés.
4)On sélectionne l'un des connectés dans une liste box pour lui envoyer un message.

Pour se faire je voulais en cliquant sur le bouton connecter qu'il face les 3 1ere étape, mais j'ai rencontré un problème car en cliquant sur le bouton on rentre dans une méthode, et "l'évènement" de la lecture du port Ethernet ne démarre que lorsque je sort de cette méthode.
Du coup je peut pas enchainer les demandes au serveur.

Alors m'a question, i a t'il un moyen simple de rendre la chose possible c'est a dire suspension dans la méthode pour attendre que l'évènement se finisse. Ou comme je pense, le seul moyen c'est faire des threads et sémaphore.

Il y a peut être une autre solution que j'avais pris pendant mon stage (en VB.net)c'est de ne pas utilisé l'évènement mais faire un appel en lecture manuel avec un time-out.

Merci de votre aide.



Technicien en électricité industriel (39 ans). En cours de reconversion par un BTS IRIS 2éme année.Actuellement en cours.

3 réponses

cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
14 nov. 2009 à 15:43
Bonjour,

Pour la ListBox, je te réponds en Delphi (Utilise aussi la VCL). Tu devrais arriver à traduire en C++.

procedure TForm1.Button1Click(Sender: TObject);
var
  lpLine: String;
begin
  lpLine:= '';
  if ListBox1.ItemIndex <> -1 then
    lpLine:= ListBox1.Items[ListBox1.ItemIndex];
  ShowMessage(lpLine);
end;
0
cs_megamario Messages postés 145 Date d'inscription lundi 15 juin 2009 Statut Membre Dernière intervention 14 février 2013
14 nov. 2009 à 21:48
Merci j'ai trouvé pour la liste box:

        AnsiString Nom;
        int Nbr = ListBoxConnecter ->ItemIndex ;
        if (Nbr>-1)
        {
             Nom = ListBoxConnecter ->Items ->Strings [Nbr];
        }


Par contre toujours pas trouvé pour mon 2eme probleme, le prof m'a donnée comme solution d'utilisé:
Application->ProcessMessages();


Mais j'ai un gros plantage a la lecture de cette ligne, j'ai fait un post la dessus.


Technicien en électricité Industriel (39 ans), en cours de reconversion BTS IRIS 2eme Année.
Au lycée pendant l'année scolaire, et en stage pendant les vacances scolaire.
0
dragonjoker59 Messages postés 92 Date d'inscription samedi 26 mars 2005 Statut Membre Dernière intervention 23 septembre 2015
15 févr. 2010 à 12:11
Je crois qu'il faut que tu redécomposes tes étapes (si possible, vu que tu ne codes que la partie client pour l'instant)
1) (Côté client)Tu essaies de te connecter (tu envoies ton login au serveur)
2) (Côté serveur) Il reçoit tes infos de connexion, il regarde si c'est correct, il t'envoie un message disant 'OK' ou 'Pas OK'.
3) (Côté client) Tu reçois le message de résultat de connexion. Là, en fonction du résultat, tu demandes au serveur la liste des connectés.
4) (Côté serveur) Il reçoit du client une demande de la liste de connectés. Si le client est connecté, il la lui fournit.
5) (Côté client) Tu reçois la fameuse liste de connectés, tu en fais ce que tu en as besoin.

Donc en fait, il te faut une boucle de traitement des messages réseau, et en fonction du message reçu, tu effectues le traitement approprié. Pour cela, tu dois pouvoir utiliser des sockets de communication réseau non bloquants. Je te parles de cette méthode là car c'est selon moi la plus efficace, car le fait d'utiliser des sockets bloquants bloquerait même l'affichage de l'application (à moins que ta gestion de socket soit threadée, ce qui reviendrait au même que de faire du socket non bloquant).
0
Rejoignez-nous