TIdUDPServer => EIdCouldNotBindSocket



  • Hallo,

    ich habe urplötzlich Probleme mit TIdUDPServer. Weil mein Projekt Probleme mit alten (falschen) Abhängigkeiten hatte, habe ich die Projektdatei gelöscht und das Projekt neu aufgebaut. Seit dem funktioniert aber der TIdUDPServer nicht mehr. Direkt beim Start, also in dem Moment wo die Komponenten der Form inizialisiert werden bekomme ich die Fehlermeldung EIdCouldNotBindSocket.

    Properties laut DFM-File:
    object UDPServer: TIdUDPServer
    Active = True
    BroadcastEnabled = True
    Bindings = <>
    DefaultPort = 11880
    OnUDPRead = UDPServerUDPRead
    Left = 335
    Top = 150
    end

    egal wie ich den Port setzte, es klappt nicht. Vorher lief alles Perfekt. Woran liegt das?
    (BDS 2006, Indy 9, Update2 und alle Hotfixes installiert, BDS gerade frisch installiert)

    mfg
    xXx



  • Hab viel herumprobiert und folgendes herausgefunden:
    In einem Minimalprojekt klappt alles wie es soll.
    Wenn ich Aktive=true im Konstruktor der Form setzte, klappts auch nicht.
    Wenn ich Aktive=true im OnShow setze klappt es...
    Was auch immer... es klappt nu, warum anders nicht, wissen die Götter...

    mfg
    xXx



  • Heureka!
    Nachdem ich noch andere gruselige Dinge feststellen musste, habe ich bemerkt, dass in der Projekt.cpp mehrere Fenster doppelt erstellt werden. U.A. auch das Fenster in dem der UDPServer drin ist. Darum war der Socket beim 2. CreateForm selbstverständlich belegt.
    Warum die IDE aber solchen Blödsinn gemacht hat, bleibt mir verborgen...

    mfg
    xXx



  • Argh das hab, hatte ich auch schon mal, kann es sein, das du das gleich zum Programmstart in der

    __fastcall TForm1::TForm1(TComponent* Owner)
    	: TForm(Owner)
    {
    
    }
    

    Die Formulare öffnest ? Ich habe die Vermutung das das Böse ist 🙂



  • Nein, die Formulare werden automatisch erzeugt, das ist das Problem. Weil beim erzeugen werden alle Komponenten erzeugt, UDPServer macht sein Binding... Wenn dann die Form ein zweites mal erzeugt wird, scheitert das Binding 😉
    In meiner Projekt.cpp stand:

    Application->CreateForm(__classid(TMeinFenster), &MeinFenster);
    //... noch mehr Fenster ...
    Application->CreateForm(__classid(TMeinFenster), &MeinFenster);
    

    Und das war gemein ^^

    EDIT: Sichtbarkeit der anderen Forms setzte ich im OnShow der MainForm.

    mfg
    xXx


Anmelden zum Antworten