Bonjour,
tout d'abord je précise mon environnement :
- Le client est développé sous Delphi 2007
- Le serveur sous Delphi XE
- Les données transféré et réceptionné sont en format ANSI
- J'utilise les API Winsock pour les deux modules
Mon système de multithreading :
Pour le Server j'ai un thread principal d'écoute, dés qu'un nouvel utilisateur se connecte je créer un nouveau thread uniquement pour celui-ci , ce thread servira a recevoir tout simplement tu texte cour pas plus de 8KiB max.
Quand par exemple je transfert un fichier entre le client et le serveur ou vis versa, le client créer un nouveau thread qui lui même va créer une nouvelle connexion au serveur, le serveur reçois donc (dans le thread lsiten) l'ordre de créer un nouveau thread de type transfert de fichier.
pour résumer je n'utilise pas winsock en asynchrone, mon mutlithreading nécessite une nouvelle connections pour chaque types d'action (transfert de fichiers, capture d'écran etc..)
Tout cela fonctionne a merveille en locale, WAN sur une machine réel mais si j'utilise mon client et serveur sur deux machines virtuel distinct ça fonctionne moins bien, les connections mettent environ 30 sec a 1 minute pour être établie.
Je précise mes deux machines virtuelles sont sur Windows 7 x64 et l'autre x86 une est directement branché sur ma clef WIFI (Server) et l'autre en mode bridge.
Une idée ?
Merci d'avance
Partager