C++ Builder Socket Bloquant !

C++ Builder Socket Bloquant ! - C++ - Programmation

Marsh Posté le 06-11-2004 à 15:13:07    

Bonjour a tous,
Voila je vous explique mon probleme je suis entrain d'ecrire un programme similare a DirectConnect (qui est un programme de transfere de fichier) sous C++ Builder j'aimerais utilisé des sockets bloquants car le socket serveur genere des threads automatiquement pour tout les clients qui se connectent(ce qui me permettra de lancer plusieurs transfert) mais voila j'ai un probleme avec le gestionnaire d'erreur (OnError) qui apparement refuse de fonctionner avec les sockets "bloquant" (vu que le socket genere une execption) alors qu'il fonctionne nickel en "non bloquant" ...Est ce que quelqu'un saurait me dire comment ca focntionne car je trouve pas vraiment de doc la dessus ! Voici une partie de mon code pour illustré le probleme:
 

Code :
  1. #include "DownloadFile.h"
  2. DownloadFile::DownloadFile(TForm * form,AnsiString ip,int port,AnsiString name,int ligne,int numeroRep)
  3. {
  4. sc=new TClientSocket(form);
  5. sc->Port=port;
  6. sc->Address=ip;
  7. sc->ClientType=ctBlocking; //ctNonBlocking;
  8. name_File=name;
  9. sc->OnConnect=scConnect;
  10. this->ligne=ligne;
  11. this->numeroRep=numeroRep;
  12. sc->OnError=gestionnaireErreur;
  13. sc->Open();
  14. }
  15. DownloadFile::~DownloadFile()
  16. { }
  17. void __fastcall DownloadFile::scConnect(TObject *Sender,
  18. TCustomWinSocket *Socket)
  19. {
  20. /*Thread=new TDownloadThread(true,sc,ligne,numeroRep,name_File);
  21. Thread->Priority=tpLowest;
  22. Thread->Resume();*/
  23. }
  24. void __fastcall DownloadFile::gestionnaireErreur(TObject *Sender, TCustomWinSocket *Socket,
  25. TErrorEvent ErrorEvent, int &ErrorCode)
  26. {
  27. AnsiString mes;
  28. switch (ErrorEvent)
  29. {
  30. case eeSend: mes = "Une erreur est survenue lors d'une tentative d'écriture sur la connexion socket";
  31. break;
  32. case eeReceive: mes = "Une erreur est survenue lors d'une tentative de lecture sur la connexion socket";
  33. break;
  34. case eeConnect : mes ="Le Serveur n'existe pas ou bien il est inactif"; break;
  35. case eeDisconnect: mes="Une erreur est survenue lors d'une tentative de fermeture de connexion";break;
  36. case eeAccept: mes="Un problème s'est produit lors d'une tentative d'acceptation d'une demande de connexion cliente"; break;
  37. case eeGeneral: mes="Le socket a reçu un message d'erreur non répertorié";
  38. }
  39. Application->MessageBoxA(mes.c_str(),"Problème de socket",MB_OK);
  40. ErrorCode=0;
  41. }

Reply

Marsh Posté le 06-11-2004 à 15:13:07   

Reply

Marsh Posté le 08-11-2004 à 19:37:38    

il y a vraiment personne qui a une idée ?

Reply

Sujets relatifs:

Leave a Replay

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