TTcpServer Problem



  • Ich habe ein TTcpServer ( mit Indy hab ich so a bissle Probleme bei Belastungstests des Servers [spontane Schutzverletzung,etc.]) , welcher auch bei lesen funktioniert.
    Nur wenn der Client die Verbindung beendet, bekommt das der Thread net mit. (FClientSocket->Connected ist immer noch true)
    Erst beim Programmbeenden wird der Thread beendet.
    Hat jemand eine Ahnung wie man das Problem beheben kann.

    //---------------------------------------------------------------------------
    __fastcall TTCPClientThread::TTCPClientThread(TServerSocketThread *ServerThread)
            : TClientSocketThread(ServerThread)
    {
    FServerThread=ServerThread;
    }
    //---------------------------------------------------------------------------
    void __fastcall TTCPClientThread::Execute()
    {
    TCustomIpClient *FClientSocket;
    FClientSocket = new TCustomIpClient(NULL);
    if (FServerThread!=NULL)
         if (FServerThread->ServerSocket!=NULL)
                    FServerThread->ServerSocket->Accept(FClientSocket);
    while (!Terminated)
            {
               try {
                    ::Sleep(10);
                    if (FClientSocket->WaitForData(1000)) // Sonst wartet er auf Daten, 
                                    FDataStr=FClientSocket->Receiveln(); // und der Thread bleibt stehen
                                   else
                                    FDataStr="";
                    if (FDataStr.Length()>0) ;// spätere Weiterverwendung der gelesenen Daten
                   }
                   catch (Exception &e )
                   { delete FClientSocket;return;}
              if (!FClientSocket->Connected)
                          break;
            }
    delete FClientSocket;
    }
    //---------------------------------------------------------------------------
    

    TcpServer1 hat BlockMode == bmThreadBlocking

    void __fastcall TForm1::TcpServer1GetThread(TObject *Sender,
          TClientSocketThread *&ClientSocketThread)
    {
    
    ClientSocketThread = new TTCPClientThread(TcpServer1->ServerSocketThread);
    }
    


  • Die Anzahl der aktiven Verbindungen überprüfst du?

    -junix



  • Das Prob ist ich weiss net wo die Anzahl der geöffneten Verbindungen gespeichert ist.

    es gibt einen Threadpool wo alle Threads aufgelistet sind.


Anmelden zum Antworten