Socket... trop speed!

Signaler
Messages postés
1154
Date d'inscription
mardi 9 septembre 2003
Statut
Membre
Dernière intervention
15 août 2009
-
Messages postés
1154
Date d'inscription
mardi 9 septembre 2003
Statut
Membre
Dernière intervention
15 août 2009
-
Hello,

Au risque de me faire taper sur les doigts par aardman (aïe!), je m'aventure à poser une nième question sur les sockets!

Mon prog a un client et un serveur. Une fois connectés, ils s'envoient des fichiers sur le principe: reçoit fichier (~10KB) -> traitement -> envoi nouveau fichier, et ceci plusieurs fois

Je me suis rendu compte que tout ça va trop vite pour mon programme, dans le sens où par exemple, lorsque le serveur a envoyé un fichier, il s'attend à recevoir un fichier en réponse. Il entre donc dans la fonction getfile. Mais le client n'as pas eu le temps de finir d'enregistrer le fichier reçu et donc de traîter les infos pour créer un nouveau fichier...et tout plante! J'sais pas si vous avez compris mon problème? J'utilise pourtant pas des sockets synchrones...

Si quelqu'un a déjà eu ce problème....

PS: j'ai bien vérifié, le programme plante (càd s'immobilise) sur recv(m_socket,buffer,10000,0), ce qui montre bien qu'il attend en vain...

3 réponses

Messages postés
1
Date d'inscription
jeudi 2 septembre 2004
Statut
Membre
Dernière intervention
22 septembre 2004

Bon... j'espère que j'ai tout bien compris mais selon moi il n'y a pas de problème !

Ton programme se bloque à la lecture sur le socket et c'est normal car la lecture sur un socket est un évènement bloquant.

Normalement, dès que ton autre appli répond, cela devrait tout débloquer. Si ce n'est pas le cas, tu as effectivement un problème :)
Messages postés
1154
Date d'inscription
mardi 9 septembre 2003
Statut
Membre
Dernière intervention
15 août 2009
17
regarde...
BOOL csSendFile(char* fileName)
{
FILE *fich;
char *buffer;// = NULL;
int TailleFichier1;// = 0;
DWORD dwFileSize;//=0;
HANDLE hSrcFile;// = INVALID_HANDLE_VALUE;
hSrcFile = CreateFile(fileName,GENERIC_READ,FILE_SHARE_READ,NULL,
OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);

if(hSrcFile == INVALID_HANDLE_VALUE) {CloseHandle(hSrcFile);return FALSE;}

dwFileSize = GetFileSize(hSrcFile,NULL) + 1;
CloseHandle(hSrcFile);

if ((buffer=(char *)malloc(dwFileSize))==NULL) return FALSE;
if ((fich=fopen(fileName,"rb"))==NULL) return FALSE;
    if(TailleFichier1=fread(buffer,1,10000,fich)<0){_beep(400,600);return FALSE;}

    if (send(m_socket,buffer,TailleFichier1,0)<0) {MessageBox(NULL,"Size ERROR","Error",NULL);return FALSE;}

    fclose(fich);
free(buffer);
return TRUE;
}


envoie le fichier...

et pour la réception c'est:
BOOL csGetFile(char* fileName)
{
FILE *fich;
char *buffer;// = NULL;			// buffer memoire, va recevoir données du serveur
int TailleFichier;// = 0;		// Taille Fichier

if ((fich=fopen(fileName,"w"))==NULL) {_beep(400,600);return FALSE;}
    if ((buffer=(char *)malloc(10000))== NULL) {_beep(400,600);return FALSE;}

/////*********** C EST ICI QUE CA BUG !!! recv ne répond pas*********////////
if ((TailleFichier=recv(m_socket,buffer,10000,0))<0) {_beep(400,600);return FALSE;}
fwrite(buffer,1,TailleFichier,fich);
fclose(fich);
free(buffer);

return TRUE;
}


Ca t'inspire???!!! Moi ça me les tend...
Messages postés
1154
Date d'inscription
mardi 9 septembre 2003
Statut
Membre
Dernière intervention
15 août 2009
17
Hé hé j'suis un âne! c'est clair que si je mets fwrite(buffer,1,TailleFichier,fich), ben on est mal vu que TailleFichier vaut 0 en cas de succès!!!!

L'andouille...