Probleme boucles mutliple avec les sockets

cs_miki42 Messages postés 23 Date d'inscription vendredi 16 mai 2008 Statut Membre Dernière intervention 24 août 2008 - 30 juin 2008 à 12:49
cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 - 30 juin 2008 à 17:17
Bonjour a tous voila j'ai pa le choix,deja une semaine que je mord la langue pour trouver dou vient mon probleme mais rien y fait suit obliger de farie appelle a vous.Bon voila j'ai realiser un debut de code qui met un serveur en ecoute sur un port celui si "balance" cmd.exe sur une socket et qui  le client peut ainsi interagir sur le cmd.exe a distance bref voici mon debut de code:

#include <stdio.h>
#include <stdlib.h>
#include<winsock2.h>


 


int main(int argc, char *argv[])
{
char buffer[1000];
fgets(buffer,sizeof buffer,pp);
WSADATA WSAData;
WSAStartup(MAKEWORD(2,0),&WSAData);
SOCKET sock;
SOCKET csock;
SOCKADDR_IN sin;
SOCKADDR_IN csin;
sin.sin_addr.s_addr = htonl(INADDR_ANY);
sin.sin_family  = AF_INET;
sin.sin_port  = htons(23);
sock = socket(AF_INET,SOCK_STREAM,0);
bind(sock, (SOCKADDR *)&sin, sizeof(sin));
listen(sock, 0);
int val = 0;
FILE *pp;
pp=popen("cmd.exe","r");
while(fgets!=NULL)
{
fgets(buffer,sizeof buffer,pp);
}




while(1)
{
    
int sinsize = sizeof(csin);
if((csock = accept(sock, (SOCKADDR *)&csin, &sinsize)) != INVALID_SOCKET)
{


 


send(csock,buffer,sizeof buffer,0);







}
}
la compilation marche tre bien le probleme et que avec ma boucle while sur fgets mon serveur ne marche pas pas de connection et en revanche si j'enleve cette boucle tout fonctionne si ce n'est que mon cmd.exe et a moitie lu.
Si quelqu'un pouvait m'aporter sons aide ou une explication ce cerai cool merci d'avance a vous.

1 réponse

cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 4
30 juin 2008 à 17:17
while(fgets!=NULL)
{
fgets(buffer,sizeof buffer,pp);
}

Euh y a rien d'anormal là?
fgets fonction et non pas variable

void* pResult=NULL;
do
{
pResult=fgets(buffer,sizeof buffer,pp);
}while(fgets!=NULL);

cela dit ça compile car fgets écrit tout seul correspond à une adresse, donc comparable à des entiers.
0
Rejoignez-nous