lolorenzeb
Messages postés71Date d'inscriptionlundi 24 mai 2004StatutMembreDernière intervention13 septembre 2006
-
27 avril 2006 à 16:15
yoyo269
Messages postés1403Date d'inscriptionlundi 23 février 2004StatutMembreDernière intervention11 janvier 2009
-
1 mai 2006 à 10:36
Bonjour à tous,
Voila j'avais deja poster dans un précédent sujet mais comme j'ai revu tout mon code cela va etre plus simple de répondre. J'ai donc créer une application réseau (graphique) qui créer une socket et qui se met en écoute en attente d'une connexion.
Mon probleme est que lorsque je clique sur mon bouton pour que l'appli se mette en écoute, la fenetre se fige et ensuite plante. Le problème vient du fait que j'ai une boucle pour actualiser l'affichage dans "WinMain" ce qui est logique, et une autre qui permet au prog d'etre en écoute (dans la procedure "create_connexion"). Donc lorsque le prog se met en écoute il se bloque dans la boucle d'ecoute et l'affichage ne se fait plus et tout plante.
J'ai entendu vaguement parler des "thread" d'ou le ? dans le titre du sujet mais je ne sais pas du tout m'en servir et je ne suis pas sur non plus que cela règle mon problème.
Si quelqu'un a une idée... Merci d'avance et désolé pour le roman :)
Voila mon code:
/****************BOUCLE PRINCIPALE**************************/
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow){
//---------Boucle d'affichage---------------------
while (GetMessage (&msg, NULL, 0, 0)){
TranslateMessage (&msg);
DispatchMessage (&msg);
}
return msg.wParam;
}
/************FIN DE LA BOUCLE PRINCIPALE*****************/
/******************CREATION DE LA FENETRE*******************/
HWND CreateWnd(HINSTANCE hInst){
code ........
}
/***************FIN CREATION DE LA FENETRE*****************/
/*********************TRAITEMENT**********************/
void traitement(SOCKET client){
code .......
}
/*********************FIN DU TRAITEMENT*******************/
/************************************************************/
/****CONTROLE DES RETOURS DE MESSAGES DE WINDOWS*****/
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){
code .............
}
/***FIN DU CONTROLE DES RETOURS DE MESSAGES DE WINDOWS****/
/************************************************************/
lolorenzeb
Messages postés71Date d'inscriptionlundi 24 mai 2004StatutMembreDernière intervention13 septembre 20062 1 mai 2006 à 00:07
C'est bon j'ai trouver la solution. Il fallait bien que je crée un thread pour mettre ma boucle d'ecoute dedans. Pour ceux qui ont le meme probleme il faut utiliser la fonction CreateThread. Google vous aidera ;-)
yoyo269
Messages postés1403Date d'inscriptionlundi 23 février 2004StatutMembreDernière intervention11 janvier 20092 27 avril 2006 à 17:32
Houla !!!
Pas besoin de boucle d'écoute. Mais une boucle d'attente de connexion plutôt.
pour ça il faut que tu utilises un thread pour que ton prog ne se fige pas.
YOYO, @+.
[font= Comic Sans MS][size=3] [green][:D] YOYO [;)]/green=3Sans MS
cs_AlexN
Messages postés694Date d'inscriptionlundi 5 décembre 2005StatutMembreDernière intervention 8 janvier 201419 27 avril 2006 à 19:25
lut,
Communication par socket en mode connecté (SOCK_STREAM)
Organisation du serveur :
1) Création et attachement de la socket d'écoute socket()/bind() 2) Ouverture du service listen() 3) Attente de demande de connexion accept() 4) Traitement direct ou création d'un processus fork()
5) Parent -> Retour 3)
5) Enfant -> Traitement de la demande
Organisation du client :
1) Création (et attachement possible) d'une socket socket()/bind() 2) Construction de l'adresse serveur
3) Demande de connexion connect() 4) Si Echec(3) -> Retour 3)
4) Sinon : Dialogue avec le serveur
Il y a 2 unités de traitement au moins -> 2 process (2 programmes) ou 2 threads. Sinon, je ne vois pas d'autres solutions.