Netzwerk - "asynchronous socket error" bei TClient/TServerSocket abfangen



  • Bei Sockets gibts doch das Ereigniss OnError.
    Wird dieses Ereignis auch bei Anysnchronen SocketErrors aufgerufen?

    Oder wie kann ich mit Catch und Try so etwas abfangen?

    Ich will das eine Fehlermeldung kommt, wenn der ClentSocket keine Verbindung herstellen kann,

    thx

    Thargor

    [ Dieser Beitrag wurde am 01.07.2003 um 21:23 Uhr von Jansen editiert. ]



  • String  Server="192.168.0.101" ;
    
    try
    {
      if (InputQuery("Computer to connect to", "Address Name:", Server))
      {
        ClientSocket->Host = Server;
        ClientSocket->Active = true;
    
      }
    }
    
    catch(ESocketError &E)
    {
    Application->MessageBox("Keine Verbindung zum Server", "Wegbeschreibung", MB_OK);
    }
    

    So hab ich es laut Hilfe verstanden, aber es geht so irgendwie net. Es kommt immer noch die "Ansychroner SocketError" Fehler meldung, anstatt das.



  • Du musst in der Tat das OnError-Event von TClientSocket benutzen (bzw. OnClientError bei TServerSocket).
    Über den ErrorCode kannst du verhindern, dass eine Exception geworfen wird, durch Auswerten des ErrorEvent-Parameters kannst du zB. entsprechende Fehlermeldungen absetzen.

    //---------------------------------------------------------------------------
    void __fastcall TForm1::ClientSocket1Error(TObject *Sender,
          TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &ErrorCode)
    {
      // analyse ErrorEvent
      String Msg = "Unspecified ClientSocket error.";
      switch(ErrorEvent)
      {
        case eeGeneral :
          Msg = "The socket received an error message that does not fit into any category.";
        case eeSend :
          Msg = "An error occurred when trying to write to the socket connection.";
          break;
        case eeReceive :
          Msg =  "An error occurred when trying to read from the socket connection.";
          break;
        case eeConnect :
          Msg = "A connection request that was already accepted could not be completed.";
          break;
        case eeDisconnect :
          Msg = "An error occurred when trying to close a connection.";
          break;
        case eeAccept :
          Msg = "A problem occurred when trying to accept a client connection request.";
      }
      Application->MessageBox(Msg.c_str(), "ClientSocket Error", MB_OK | MB_ICONSTOP);
    
      // prevent exception
      ErrorCode = 0;
    }
    //---------------------------------------------------------------------------
    

    [ Dieser Beitrag wurde am 01.07.2003 um 21:26 Uhr von Jansen editiert. ]


Anmelden zum Antworten