présentation :
Le zip est composé de deux programmes distincts.
-un programme client qui permet de se connecter au serveur afin d'échanger des fichiers et de dialoguer avec les autres clients connectés au serveur.
-un programme serveur qui gèrent les clients et leur permet d'interagir entre eux.
méthode :
le mécanisme utilisé pour manipuler les sockets est le concept IOCP de windows, mécanisme très puissant et performant qui permet de traiter plusieurs client en même temps avec une poignées de
threads.d'une part ce mécanisme est plus performant que select, WSAAsyncselect et WSAEventselect de l'autre il est plus compliqué à mettre en place que ces derniers. une fois que l'on connait les différentes étapes pour mettre en place le mécanisme et les quelques cas de figures qui peuvent se présenter, bien la réalisation d'une application autour de ce concept n'est pas plus compliqué que l'utilisation de select() etc...
il se pourrait que vous rencontrez des souci à l'inclusion de <shlobj.h> ds ce cas il faudra changer shlobj.h et shlobj.h comme cela:
shobjidl :
- Commenter les lignes 2189 à 2193
- Commenter les lignes 8085 à 8095
shlobj.h :
- Modifier la ligne 1422 en } *LPFVSHOWINFO;
- Modifier la ligne 3457 en } *LPSHELLFLAGSTATE;
pour l'utiliser sur le net penser à ouvrir le port que vous auriez choisi sur le modem adsl.
Conclusion :
Le code n'est pas commenté mais cependant je reste à votre disposition pour toutes questions, suggestions ou bugs
code tres interessant mais j'aimerais bien que tu nous explique mieux le role de chaque class avec si possible un shéma présentant les héritages histoire de mieux voir el code
merciiii
screen :
http://img188.imageshack.us/img188/8867/rghv.png
void __fastcall TListeDossiers::Button3Click(TObject *Sender)
{
WIN32_FIND_DATA File;
HANDLE liste;
//liste des disque dur
AnsiString Driver = DCB->Drive;
AnsiString Chemin = Driver+":\\*" ;
ShowMessage(Chemin);
//AnsiString Taille =(File.nFileSizeHigh*MAXDWORD+File.nFileSizeLow)/1024;
liste = FindFirstFile(Chemin.c_str(),&File);
VueFichierClient->Clear();
do
{
if(File.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) // ==> Repertoire
{
TListItem*pitem;
pitem=VueFichierClient->Items->Add();
pitem->Caption = File.cFileName;
}
else // ==> Fichier
{
}
} while((FindNextFile(liste, &File)));
FindClose(liste);
}
if(OpenDialog1->Execute())
{
//chemin du fichier + extension
CheminFichier->Text=OpenDialog1->FileName; //CheminFichier est un Edit
//Nom du fichier + ext
AnsiString NomFichier = ExtractFileName(CheminFichier->Text);
TListItem*pitem;
pitem=VueFichierClient->Items->Add(); //VueFichierClient est un ListView
pitem->Caption=NomFichier;
pitem->ImageIndex =DossierClient->GetIconIndex(CheminFichier->Text.c_str());
pitem->SubItems->Add(ExtractFileExt(CheminFichier->Text));
}
Il me reste plus qu'a afficher le contenu du répertoire avec tout les fichier.
j'utilise deux objets TImageList "LargeIconList et SmallIconList" qui représentent les petites et moyennes icônes.
Ensuite j'affecte à la propriété Handle de TImageList la valeur renvoyé par "SHGetFileInfo :API Windows" regarde la procédure "FormCreate dans interface.cpp" Ceci à pour but de faire pointer nos deux TImagesList sur la Listes d'images interne à windows pour les petites et moyennes icones.
Pour finir j'utilise la fonction "GetIconIndex dans interface.cpp" qui va me retourné l'index de l'image en fonction de l'extension du nom de fichier passé en paramètre.
Pour récupérer le contenu d'un dossier j'utilise les fonctions "FindFirst et FindNext :API windows"
n'hésites pas à laisser un message pour plus d'explication.
Cordialement en espérant t'avoir aidé.
jolie travail !
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.