Transmitfile

Transmitfile - C++ - Programmation

Marsh Posté le 04-05-2005 à 09:24:55    

Salut.
J'utilise un Transmitfile dans le code de mon serveur.
Comment mon programme client doit il gérer la réception du fichier?
Dans mon programme serveur je fait ceci

Code :
  1. HANDLE hFind;
  2. WIN32_FIND_DATA FindData;
  3. // Début de la recherche
  4. hFind=FindFirstFile ("1.bmp", &FindData);
  5.   if (hFind!=INVALID_HANDLE_VALUE)
  6. {
  7. // Si le fichier trouvé n'est pas un dossier mais bien un fichier, on affiche son nom
  8. if (!(FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
  9. {
  10. MessageBox (NULL, FindData.cFileName, "Fichier", MB_ICONINFORMATION);
  11. }


 
Une messagebox s'affiche bien avec marqué 1.bmp car ce fichier se trouve dans mon répertoire
 
Cependant quand j'écris ceci  

Code :
  1. int a = TransmitFile(csock,hFind,0,0,NULL,NULL,TF_DISCONNECT);


Le a vaut toujours 0.
Comment cela se fait?
 
 
Merci d'avance

Reply

Marsh Posté le 04-05-2005 à 09:24:55   

Reply

Marsh Posté le 04-05-2005 à 10:24:33    

La doc te dit d'appeler WSAGetLastError pour avoir plus d'infos sur l'erreur.
Si tu lis attentivement la doc, FindFirstFile te renvoie un search handle. TransmitFile attend un handle de fichier.
Donc il manque un CreateFile.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 04-05-2005 à 15:40:45    

Merci.
Sinon sur le site de msdn ils mettent ceci Server  Requires Windows Server 2003, Windows 2000 Server, or Windows NT Server 3.51 and later.
Cela veux dire qu'on ne peux pas creer de serveur avec transmitfile sous xp ou est ce une erreur?

Reply

Marsh Posté le 04-05-2005 à 15:49:46    

XP n'existe pas en version server il me semble.
Juste au dessus, dans client, ils te citent XP. De toute sfaçons si c'est dans 2000 c'est dans XP.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 04-05-2005 à 16:09:27    

Merci.
Cependant je fait ceci.

Code :
  1. HANDLE file;
  2. file = CreateFile(szfile, GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, 0);
  3. int a = TransmitFile(csock,file,0,0,NULL,NULL,TF_DISCONNECT);


file ne me renvoit pas d'erreur mais cependant a=0 toujours.
Quelqu'un saurait pourquoi?
Merci

Reply

Marsh Posté le 04-05-2005 à 16:17:40    

GENERIC_WRITE c'est pour l'écriture. Tu dois lui filer un fichier à lire.

Code :
  1. bool SendFile( const SOCKET & Sock, const char * FileName )
  2. {
  3.     HANDLE hFile = CreateFile(
  4.         FileName,
  5.         GENERIC_READ,
  6.         FILE_SHARE_READ,
  7.         NULL,
  8.         OPEN_EXISTING,
  9.         FILE_FLAG_SEQUENTIAL_SCAN,
  10.         NULL );
  11.     if ( hFile == INVALID_HANDLE_VALUE )
  12.     {
  13.         cerr << "Erreur d'ouverture du fichier\n";
  14.         return false;
  15.     }
  16.     BOOL ok = TransmitFile(
  17.         Sock,
  18.         hFile,
  19.         0,
  20.         0,
  21.         NULL,
  22.         NULL,
  23.         0 ); 
  24.     if ( !ok )
  25.     {
  26.         cerr << "Erreur TransmitFile\n";
  27.     }
  28.     CloseHandle( hFile );
  29. }


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 04-05-2005 à 16:49:22    

Bon maintenant le ok renvoie bien 1.
Comment gérer le client maintenant?
Une fois qu'il s'est connecté au serveur que dois je faire pour que le fichier transféré se retrouve dans le répertoire de mon code serveur?
J'ai commencé par faire creer le fichier sur le disque

Code :
  1. char *FileName = "d:\\webcam.ini";
  2.        HANDLE hFile = CreateFile(
  3.          FileName,
  4.          GENERIC_WRITE,
  5.          FILE_SHARE_WRITE,
  6.          NULL,
  7.          CREATE_NEW,
  8.          FILE_FLAG_SEQUENTIAL_SCAN,
  9.          NULL );
  10.      if ( hFile == INVALID_HANDLE_VALUE )
  11.      {
  12.          Application->MessageBox("erreur création fichier","Info",MB_OK);
  13.      }


 
Que faire après pour stocker les données dans le fichier?
Un bon vieux recv?
Y a rien de mieux adapté?
Merci


Message édité par masseur le 04-05-2005 à 16:49:56
Reply

Marsh Posté le 04-05-2005 à 19:42:23    

Ben tu te connecte au server, tu récupères les données et les écrit dans le fichier. Du côté client, TransmitFile ça change rien.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 04-05-2005 à 19:57:31    

Si je résumé dans le serveur je fait le transmitfile et dans le client je fait plusieurs receive et je l'ecrit dans le fichier par writefile?


Message édité par masseur le 04-05-2005 à 19:58:00
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed