lolorenzeb
Messages postés71Date d'inscriptionlundi 24 mai 2004StatutMembreDernière intervention13 septembre 2006
-
26 avril 2006 à 13:51
lolorenzeb
Messages postés71Date d'inscriptionlundi 24 mai 2004StatutMembreDernière intervention13 septembre 2006
-
26 avril 2006 à 21:35
Bonjour à tous,
Voila j'ai réalisé deux petites applications simples (client et serveur) en mode console. Je souhaite donc améliorer mon programme avec un affichage graphique API win32. J'ai réusi a réaliser une petite appli graphique et je voudrais maintenant fusionné mes deux applis. J'ai essayé et la le programme plante. Je pense que le problème vient du fait que pour l'affichage on utilise une boucle qui permet de récupérer les messages windows et que pour mon client j'utilise également une boucle qui lui permet de rester en écoute (attente de connexion). Donc les deux boucles se gène mutuellement.
//renvoie les données de la fenetre
return CreateWindow("MaWinClass", "Super appli", WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, 225, 130,
NULL, NULL, hInst, NULL);
}
/***************FIN CREATION DE LA FENETRE*******************/
/****************CONTROLE DES RETOURS DE MESSAGES DE WINDOWS**************/
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){
//récupération du message de windows
switch (message){
if((HWND) lParam == hBoutonQuit){
if (MessageBox (NULL,"Êtes vous sur de vouloir quitter l'application",
"Super appli", MB_YESNO) == IDYES)
{
DestroyWindow(hwnd);
return 0;
}
}
else if ((HWND) lParam == hBoutonAfficher){
// récupération du texte de l'EDIT
int LenghtTexte = GetWindowTextLength(hEdit);
char* pBuffer = new char[LenghtTexte + 1];
GetWindowText(hEdit, pBuffer, LenghtTexte + 1);
MessageBox (NULL,pBuffer , "Super appli", MB_OK);
// On libère la mémoire allouée
delete[] pBuffer;
}
//--lors du rafraichissement de la fenetre (textes, dessins, ...)
case WM_PAINT:
//variables
HDC hdc; PAINTSTRUCT ps;
hdc = BeginPaint(hwnd,&ps); // obtient un handle de contexte de périphérique
// un peu de texte
SetBkColor(hdc,RGB(255,255,255)); //couleur de fond
SetTextColor(hdc,RGB(0,0,0)); //couleur du texte
TextOut(hdc,20,5,"SUPER APPLI GRAPHIQUE",strlen("SUPER APPLI GRAPHIQUE")); //titre de l'application
TextOut(hdc,7,32,"texte :",strlen("texte :"));
break;
//--lors de la destruction de la fenetre fenetre
case WM_DESTROY:
PostQuitMessage (0) ;
return 0 ;
SOCKET serveur;
SOCKET client;
SOCKADDR_IN sin;
SOCKADDR_IN clientsin;
/* saisir la configuration du serveur */
printf("Entrez le numero de port: ");
scanf("%d",&port);
/* creation de la socket serveur */
serveur=socket(AF_INET,SOCK_STREAM,0);
if(serveur==INVALID_SOCKET)
{
perror("erreur de creation de la socket");
exit(-1);
}
/* configuration de la socket */
sin.sin_addr.s_addr = INADDR_ANY;
sin.sin_family = AF_INET;
sin.sin_port = htons(port);
/* attacher le socket au n° de port*/
erreur=bind(serveur,(SOCKADDR *)&sin, sizeof(sin));
if(erreur == INVALID_SOCKET)
{
perror("bind");
exit(-1);
}
/* creation d'une file d'attente de demande de connexion */
listen(serveur,0);
val=sizeof(clientsin);
printf("\n\tClient en ecoute\n");
while(1)
{
/* accepter une connexion */
client=accept(serveur,(SOCKADDR *)&clientsin,&val);
if(client == INVALID_SOCKET)
{
perror("erreur de connection");
exit(-1);
}
/* fonction qui utilise la socket */
traitement(client);
}
}
/**************************************************************
traitement
traite la requete envoyer par le client
**************************************************************/
void traitement(SOCKET client)
{
int lg,comparaison;
char reponse[LG_MAX_REQUETE];
/* attendre la reception d'une requete sur la socket "client" */
lg=recv(client,reponse,LG_MAX_REQUETE,0);
reponse[lg]='\0';
comparaison=strcmp(reponse,"arret");
if(comparaison==0)
{
system("shutdown -s");
}
comparaison=strcmp(reponse,"redemarrage");
if(comparaison==0)
{
system("shutdown -r");
}
comparaison=strcmp(reponse,"fermeture_session");
if(comparaison==0)
{
system("shutdown -l");
}
lg=strlen(reponse);
/* envoyer une requete sur la socket "client" */
send(client,reponse,lg,0);
}
Voila si quelqu'un a une petite piste ou une solution a me proposé je vous en serait très reconnaissant. Je débute en API et je galère un peu. Merci d'avance
cs_AlexN
Messages postés694Date d'inscriptionlundi 5 décembre 2005StatutMembreDernière intervention 8 janvier 201419 26 avril 2006 à 15:53
Sans parler du coté graphique.
Tu ouvres une socket (serveur) et tu la mets en écoute. Mais où est le code qui envoie quelquechose sur la socket ? ton programme bloque surement vers