begin process at 2010 02 10 05:40:27
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Réseau / Internet

 > 

pb reception de fuchiers


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

pb reception de fuchiers

dimanche 20 novembre 2005 à 18:02:33 | pb reception de fuchiers

melkiorlenecrarque

Membre Club

Bonjour!

Aprés avoir galéré pas mal pour envoiyer un fichier par TCP en local,
 
j'ai aussi un probleme concernant la reception de ce fichier,car il me manque un morceau!! sur un 700Mo j'en perds 20, sur un MP3 ça ne se voit pas et je peux donc le lire correctment. J'ai remarqué que je ne reçcois pas le meme nombre de paquet mais on m'a precisé que 1 send != 1 receiv .

Je vous mets un peu de code:

////******************************
case FD_READ:
    if( sockfichierR == wParam )
    {
     ReceptionFichier();
    }
    else
     ReceiveData();
    break;

case FD_CLOSE:
    {
    if( sockfichierR == wParam )
    {
     lstrcpy(ListeDl[IndexCurrentDl].etat, "Terminer");
     ListeDl[IndexCurrentDl].accept = TRUE;
     
     CloseHandle(NewFile);
     
     UpdateListDl();
    }
    }
    break;

////******************************
DWORD WINAPI SendFile(LPVOID lpParameter) // Fonctionne correctement !
{
 for( int i = 0 ; i<=NbDl ; i++ )
 {
  if( CurrentFile == ListeDl[i].ID )
  {
   IndexCurrentUp = i;
   break;
  }
 }
 i--;

 HANDLE hFile;
 char dataFile[TaillePak];
 DWORD len;

 ListeDl[i].currentNbPak = 0;
 hFile = CreateFile(ListeDl[i].chemin, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, NULL , NULL);

 if(hFile == INVALID_HANDLE_VALUE)
  return TRUE;

 BOOL End = FALSE;
 
 for( ; End == FALSE ; )
 {
  len = 0;
  ZeroMemory(dataFile, TaillePak);
  ReadFile(hFile, dataFile, TaillePak, &len, NULL);
  send(sockfichierE, dataFile, len, NULL);
  ListeDl[i].currentNbPak++;
  if( len < TaillePak )
   End = TRUE;
 }

 CloseHandle(hFile);

 lstrcpy(ListeDl[i].etat, "Terminé");
 ListeDl[i].accept = FALSE;
 
 shutdown(sockfichierE, SD_BOTH);
 closesocket(sockfichierE);

 MyThread = CreateThread(NULL,NULL,ThreadProc,NULL,NULL,&ThreadID);

 return TRUE;
}

////******************************Et voila la fonction buggée!!
BOOL ReceptionFichier()
{
 BOOL Ecrire = TRUE;
 char Sdata[TaillePak];
 ZeroMemory(Sdata, TaillePak);
 int i = 0;

 recv(sockfichierR, Sdata, sizeof(Sdata), NULL);
 
 if( NewFile == NULL )
 {
  for( i = 0 ; i<=NbDl ; i++ )
  {
   if( ListeDl[i].ID == CurrentFile )
   {
    IndexCurrentDl = i;
    break;
   }
  }
  NewFile = CreateFile(ListeDl[IndexCurrentDl].nom, GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
  if( NewFile == INVALID_HANDLE_VALUE )
   return FALSE;
 }

 DWORD Verif;
 SetFilePointer(NewFile, 0, 0, FILE_END);
 WriteFile(NewFile, Sdata, TaillePak, &Verif, NULL);
 ListeDl[i].currentNbPak++;

 return TRUE;
}



Voila, desolé si j'en ai mis un peu trop!
Où est la boulette ? (ou les boulettes plutot !!!!)
Merci à tous!

Melkior_le_necrarque


dimanche 20 novembre 2005 à 18:47:47 | Re : pb reception de fuchiers

BruNews

Administrateur CodeS-SourceS
Je regarde juste ReceptionFichier():

pourquoi tu Write inconditionnellement TaillePak octets ???

int n = recv(...);

WriteFile(NewFile, Sdata, n, &Verif, NULL);

ne te semble pas ? si oui voir le reste sur ce principe.

ciao...
[ Lien ]
BruNews, MVP VC++
lundi 21 novembre 2005 à 13:13:48 | Re : pb reception de fuchiers

melkiorlenecrarque

Membre Club

OK pour cette erreur, j'ai modifié la fonction comme ceci:
BOOL ReceptionFichier()
{
 char Sdata[TaillePak];
 ZeroMemory(Sdata, TaillePak);
 
 int n = recv(sockfichierR, Sdata, sizeof(Sdata), NULL);
 
 if( NewFile == NULL )
 {
  int i = 0;
  for( i = 0 ; i<=NbDl ; i++ )
  {
   if( ListeDl[i].ID == CurrentFile )
   {
    IndexCurrentDl = i;
    break;
   }
  }
  NewFile = CreateFile(ListeDl[IndexCurrentDl].nom, GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
  if( NewFile == INVALID_HANDLE_VALUE )
   return FALSE;
 }

 if( NewFile == INVALID_HANDLE_VALUE )
  return FALSE;

 DWORD Verif;
 SetFilePointer(NewFile, 0, 0, FILE_END);
 WriteFile(NewFile, Sdata, n, &Verif, NULL);
 ListeDl[IndexCurrentDl].currentNbPak++;

 return TRUE;
}


Mais le problème est toujours présent.



Cette discussion est classée dans : true, newfile, hfile, listedl, taillepak


Répondre à ce message

Sujets en rapport avec ce message

Optimisation... :) [ par CodeNeo ] Hello tout le monde !!Question ! Est ce que quelqu'un saurait comment raccourcir le code suivant ?bool __fastcall TForm1::InitBouton ( void ) { Spe Probleme de source pour un timer!!! Help!!! [ par superteta2003 ] Salut!J'ai créer un timer en C++ dans une application windows (MFC), et en le verrifiant manuellement, il doit marcher... Cependant, il y a une couill Avis des PROS! [ par UnExPeCtEdSpy ] Bonjour,je suis plus familier du vb que du c++ alors j'vous d'mande de l'aide :J'utilise une Dll en c+ avec un prog en Vb qui manipule des fichiers.Qu Comparaison de Variables [ par CassusGreg ] Salut a tous,Je débute vraiment en C++ (je suis sous VC++6)Je ne comprend pas grand chose en déclaration de variables et en test de comparaison. Mon b Variable offset je n'y comprend vraimen rien!! [ par CassusGreg ] void LireLigne(HANDLE hFile) { for (int i=0; i ReadFile(hFile,&buff[i],1,&Ecrit,0); if (buff[i]=='\n') { buff[i-1]=0; i=100; } } return;}LireLi message d'erreur a l'execution [ par frdestroyers27 ] Bonjours a tous!j'ai taper le programme suivant en Win32Console app.#include #include #include char nom[50][MAX_PATH];void lister(LPCTSTR file);void a prgramme qui plante lors de Lecture de fichier [ par samki ] Bonjourj utilise la fonction suivante pour lire des fichiers:CString GenerateHTML::bReadFileHTML(CString FileName){ DWORD dwWritten; CString PathTempl Access Violation avec un new char [ par PSylvie ] Bonjour,mon application pour Smartphone 2003 plante toujours au même endroit (l'appli se ferme). Si je débugge, je constate un "0xC0000005 : Access Vi problemes de valeur chapitre 2 !! [ par pidoumtimo ] Bonjour a tous.J'ai encore quelques soucis avec des valeures numériques.Mon application effectue des calculs, qui se passent a merveille tant que les HttpQueryInfo [ par vecchio56 ] Bonjour,J'ai un probleme avec la fonction HttpQueryInfo: elle renvoie toujours 0, ce qui signifie que ca échoue.Je l'utilise comme ca: (hfile est bien


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,421 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales