Bonjour � tou(te)s,
J'ai un souci que je n'arrive vraiment pas � r�gler et plus je m'y essaye, plus j'ai l'impression de ne pas voir l'�vidence.
Je cherche donc � faire un client Telnet. Pour cela, j'ai donc une classe Telnet qui me permet de me connecter � un serveur. Pour bien recevoir les donn�es du serveur je lance un Thread qui va v�rifier si j'ai recu des donn�es de temps en temps. Pour info, j'utilise la SFML tout ca :
La methode lance donc le Thread qui est une classe d�riv�e afin qu'il fasse bien ce que je souhaite (m�thode virtuelle red�finie) :
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 class Telnet { public : //Constructeur par défaut Telnet(void); //Connexion à un site void Connect(const std::string& host, unsigned short port = 23); //Pour vérifier qu'on est bien connecté bool IsConnected(void); private : //Les informations de connexion std::string mHostName; sf::IPAddress mHost; unsigned short mPort; //La socket permettant de recevoir et d'envoyer des données sf::SocketTCP mConnection; //Booléen permettant de savoir si on est toujours connecté ou pas bool mIsConnected; //Le thread de réception des données envoyées par le serveur ReceptionThread mReceptionThread; };
Bon, ici ce n'est qu'un test, donc je d�connecte tout de suite. Voici le code du main :
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9 class ReceptionThread : public sf::Thread { private: virtual void Run () { std::cout<<"Deconnexion"<<std::endl; mIsConnected = false; } };
Mes soucis :
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13 int main() { Telnet t; t.Connect("crawl.akrasiac.org"); while (t.IsConnected()) { //On attend sans rien faire } return EXIT_SUCCESS; }
- Soit je d�finis une classe avant l'autre et j'ai des soucis puisque l'autre n'est pas encore d�finie. Je sais qu'il faut d�finir partiellement la premi�re afin de ne pas faire d'erreur, mais je n'arrive plus � retrouver comment on fait :/
- De plus, l'acc�s � un membre priv�, c'est moyen. Je ne veux, bien entendu, pas avoir de setter public ca n'a rien � faire dans l'interface.
J'ai tent� de d�finir ReceptionThread dans la classe Telnet en priv� puisque l'utilisateur ne devrait pas y avoir acc�s et de rendre celle-ci amie de la classe Telnet, masi ca ne marche pas :
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 class Telnet { public : //Constructeur par défaut Telnet(void); //Connexion à un site void Connect(const std::string& host, unsigned short port = 23); //Pour vérifier qu'on est bien connecté bool IsConnected(void); private : friend class ReceptionThread; class ReceptionThread : public sf::Thread { private: virtual void Run () { std::cout<<"Deconnexion"<<std::endl; mIsConnected = false; } }; //Les informations de connexion std::string mHostName; sf::IPAddress mHost; unsigned short mPort; //La socket permettant de recevoir et d'envoyer des données sf::SocketTCP mConnection; //Booléen permettant de savoir si on est toujours connecté ou pas bool mIsConnected; //Le thread de réception des données envoyées par le serveur ReceptionThread mReceptionThread; };Merci d'avance � ceux (celles ?) qui auraient des (une au moins ?) id�es !Envoy� par Debug
PS : post identique sur le SdZ, mais ils r�pondent pas![]()
Partager