D'après un ami, ce genre de soucis est du à la mauvaise gestion des sockets erronées par mon application.
Si le temps entre le début et la fin d'une socket correcte est trop long ceci peut se produire...
Existe-t-il un paramètre pour changer ce délai?
J'utilise un TServerSocket dans C++builder 5, et traite les évènements:
OnClientConnect
OnAccept
OnClientRead
dans l'évènement OnClientRead je stocke dans un buffer ce que je recois et je le traite
Socket->ReceiveBuf(buf, sizeofBuf);
J'utilise un vector que j'incrémente à chaque fois que je suis dans l'évènement OnClientConnect
En gros voici le code de ces trois évenements
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
|
void __fastcall TFormServerApp::ServerSocketClientConnect(TObject *Sender,
TCustomWinSocket *Socket)
{
// Ajout dans le vector de n CLIENT un nouveau Client définit comme non connecté
VectorClient.push_back(CLIENT(Socket->SocketHandle));
}
//---------------------------------------------------------------------------
void __fastcall TFormServerApp::ServerSocketAccept(TObject *Sender,
TCustomWinSocket *Socket)
{
ListViewAddMessage(ListJournal, Socket, "\4", "ServerSocketAccept", "Authentification of system");
}
//---------------------------------------------------------------------------
void __fastcall TFormServerApp::ServerSocketClientRead(TObject *Sender,
TCustomWinSocket *Socket)
{
char buf[256];
IteratorVecClient IteratorClient;
int sizeofBuf;
IteratorClient = VectorClient.begin(); // return un itérateur sur le 1er élément du vecteur
while(IteratorClient!=VectorClient.end()) // Tq le vecteur des Clients n'est pas terminé
{
if(Socket->SocketHandle == (*IteratorClient).Socket.handle) // Identification du Handle client
{
sizeofBuf = Socket->ReceiveLength();
Socket->ReceiveBuf(buf, sizeofBuf);
// (long traitement)
break;
}
IteratorClient++;
}
} |
Merci de m'informer s'il y a qqch qui vous choc
Partager