C++ Builder Socket Bloquant !

cs_thePhenom Messages postés 2 Date d'inscription vendredi 5 novembre 2004 Statut Membre Dernière intervention 8 novembre 2004 - 6 nov. 2004 à 00:18
cs_thePhenom Messages postés 2 Date d'inscription vendredi 5 novembre 2004 Statut Membre Dernière intervention 8 novembre 2004 - 8 nov. 2004 à 19:39
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:

#include "DownloadFile.h"

DownloadFile::DownloadFile(TForm * form,AnsiString ip,int port,AnsiString name,int ligne,int numeroRep)
{
sc=new TClientSocket(form);
sc->Port=port;
sc->Address=ip;
sc->ClientType=ctBlocking; //ctNonBlocking;
name_File=name;
sc->OnConnect=scConnect;
this->ligne=ligne;
this->numeroRep=numeroRep;

sc->OnError=gestionnaireErreur;

sc->Open();

}

DownloadFile::~DownloadFile()
{ }

void __fastcall DownloadFile::scConnect(TObject *Sender,
TCustomWinSocket *Socket)
{
/*Thread=new TDownloadThread(true,sc,ligne,numeroRep,name_File);
Thread->Priority=tpLowest;
Thread->Resume();*/

}

void __fastcall DownloadFile::gestionnaireErreur(TObject *Sender, TCustomWinSocket *Socket,
TErrorEvent ErrorEvent, int &ErrorCode)
{
AnsiString mes;
switch (ErrorEvent)
{
case eeSend: mes = "Une erreur est survenue lors d'une tentative d'écriture sur la connexion socket";
break;
case eeReceive: mes = "Une erreur est survenue lors d'une tentative de lecture sur la connexion socket";
break;
case eeConnect : mes ="Le Serveur n'existe pas ou bien il est inactif"; break;
case eeDisconnect: mes="Une erreur est survenue lors d'une tentative de fermeture de connexion";break;
case eeAccept: mes="Un problème s'est produit lors d'une tentative d'acceptation d'une demande de connexion cliente"; break;
case eeGeneral: mes="Le socket a reçu un message d'erreur non répertorié";
}

Application->MessageBoxA(mes.c_str(),"Problème de socket",MB_OK);
ErrorCode=0;
}

1 réponse

cs_thePhenom Messages postés 2 Date d'inscription vendredi 5 novembre 2004 Statut Membre Dernière intervention 8 novembre 2004
8 nov. 2004 à 19:39
il y a vraiment personne qui a une idée ?
0
Rejoignez-nous