Indy Server-Socket - Hilfe



  • Leider sind die Beispiele in Delphi und nebenbei schon recht kompliziert.
    In Delphi das zu finden was man sucht ist nicht ganz so einfach wenn man es
    nicht kann. Geschweige denn es zu übersetzen.

    Gibt nicht ein kurzes C++ Beispiel irgendwo, für FTP Server|Clients ?



  • Tim06TR schrieb:

    Leider sind die Beispiele in Delphi und nebenbei schon recht kompliziert.
    In Delphi das zu finden was man sucht ist nicht ganz so einfach wenn man es
    nicht kann. Geschweige denn es zu übersetzen.

    Gibt nicht ein kurzes C++ Beispiel irgendwo, für FTP Server|Clients ?

    Schließe mich ihm an



  • Hallo,

    Beispiel anhand von TClient-/TServerSocket und davon ausgehend das auf dem Server ein TServerSocket gesetzt und aktiv ist, und auf dem Client ein TClientSocket gesetzt und aktiv ist.

    //Verbinden:
    ClientSocket->Host = Server;
    ClientSocket->Active = true;
    

    Es muss nichts weiter angestellt werden. Der Server akzeptiert die Verbindung selbständig (vorausgesetzt TServerSocket ist aktiv und der Server läuft auch)

    //Senden eines Textes vom Server
    ServerSocket->Socket->Connections[0]->SendText("Hallo");
    //Connections[0] steht hier für die erste verfügbare Verbindung
    

    Ansich ist es das auch schon gewesen. Das einzige was nun noch passieren könnte, wäre dass der CLient etwas mit dem Text anfangen möchte.

    void __fastcall TForm::ClientSocketRead(TObject *Sender,
          TCustomWinSocket *Socket)
    {
      ShowMessage(Socket->ReceiveText());
    }
    

    Beim Beenden natürlich nicht vergessen die Verbindung zu schließen...

    ClientSocket->Close();
    

    LG, Micha



  • Wie lasse ich abfragen ob ein Port besetzt ist ?



  • indem du prüfst, ob die Verbindung nicht zu Stande gekommen ist.



  • IdR. wirst du eine Exception bekommen, die du abfangen kannst.



  • wenn die Verbindung fehlschlägt, bekomme ich immer eine hässliche Fehlermeldung.
    Kann ich die Umgehen und einfach das in zb, das in eine Textbox schreiben ?



  • Wenn Du das in try/catch schachtelst und den Fehler korrekt abfängst, sollte keine Fehlermeldung des Systems kommen. In den Block kannst Du dann auch Deine eigene Fehlermeldung anbringen.

    Imho wird aber, wenn das Programm via BCB gestartet wurde, immer eine Fehlermeldung geworfen. Also das ganze zum Testen direkt aufrufen.



  • jaaaa...
    ich fragte ja, somit war doch zu erwarten, dass ich das noch nie gemacht habe ?
    Was muss ich denn wo abfangen
    Fehler Meldung bzw, Fehler Code kenn ich ja.

    Application->ShowException(&exception);
    

    Da gibt er mir in der Anwendung die Fehlermeldung hab ich recht ?
    dann müsste ich doch nur die Exeption mit nem if Überprüfen und dann was anderes damit tun ?



  • Anhand von mehr als 600 Posts von Dir und in Anbetracht, dass Socket-Programmierung nicht zum Grundlagenwissen gehört, habe ich eigentlich schon angenommen, dass Du wüsstest, wie man mit try/catch umgeht.

    Schau doch mal in die Borlandhilfe oder nutze mal Google um zu Verstehen, wie die Sache funktioniert.



  • Ich seh mal. Hab ich noch nie benutzt 🙂



  • AAHHH Ich glaub ich verstehen !
    btw: Sowas hab ich schon immer mal gesucht xD

    EDIT: HAHA ! Ist ja genial, das ich nicht vorher darauf gestoßen bin !

    nur um zu zeigen das ich das Prinzip geschnallt hab 🙂

    try
    {
    	Client->Connect();
    }
    catch (...)
    {
    	ShowMessage("Schwerwiegender Fehler erkannt");
    }
    


  • genau so läuft das.

    Wie gesagt im Builder gestartet kommt der Fehler immer noch, aber extern gestartet, müsste Deine eigene Meldung kommen.


Anmelden zum Antworten