Einzelnen Beitrag anzeigen

Anonymos
(Gast)

n/a Beiträge
 
#1

UDPServer OnUDPRead reagiert nicht

  Alt 11. Dez 2009, 17:52
Moin,

Ich will eine Konsolenanwendung schreiben, die sich mit einem anderen Computer im Netzwerk über UDP verbindet.
Ich benutze Indy 9
Und hab jetz leider folgendes Problem festgestellt:

Hier erstmal mein QC
Delphi-Quellcode:
type
  vForm = class
    UDPClient: TIdUDPClient;
    UDPServer: TIDUDPServer;
    constructor Create;
    destructor Destroy;
  private
    procedure UDPServerUDPRead(Sender: TObject; AData: TStream; ABinding: TIdSocketHandle);
  end;

var
  Form: vForm;

implementation

constructor vForm.Create;
begin
  inherited Create;
  UDPClient := TIdUDPClient.Create(nil);
  UDPClient.Port := Port;
  UDPClient.BroadcastEnabled := true;
  UDPServer := TIdUDPServer.Create(nil);
  UDPServer.DefaultPort := Port;
  UDPServer.BroadcastEnabled := true;
  UDPServer.OnUDPRead := UDPServerUDPRead;

  UDPServer.Active := true;
end;

destructor vForm.Destroy;
begin
  UDPServer.Active := false;
  UDPClient.Free;
  UDPServer.Free;
  inherited Destroy;
end;

procedure vForm.UDPServerUDPRead(Sender: TObject; AData: TStream; ABinding: TIdSocketHandle);
begin
  {...}        
end;
Aufgerufen wird das ganze im mom einfach in der Programmroutine:
Delphi-Quellcode:
begin
  // Variablen erstellen
  Form := vForm.Create;
  with Form do
  try
    UDPClient.Active := true;
    UDPClient.Host := HostPC;
    UDPClient.Broadcast('%Anwesenheit%' + ComputerName,Port);
    UDPClient.Active := false;
    write('Gesendet'+#10#13);
    sleep(100);
  except
    write('Senden Fehlgeschlagen'+#10#13);
  end;
  // Variablen löschen
  Form.Destroy;
end.
Wobei HostPC zu testzwecken einfach mein eigener Name ist.

Das Senden funktioniert dabei auch super, aber das mit dem Empfangen nicht.
Die oben aufgeführte OnUDPRead wird überhaupt nicht angesprochen.

Ich hab mir gedacht, dass des ganze damit zusammenhängt, dass ich in ner Konsolenanwendung keine Application hab, die die einzenen Prozeduren aufrufen kann.

Gibt es eine Möglichkeit, dass das Programm trotzdem die UDPRead-Prozedure aufruft ?

Danke schonmal für alle Antworten
  Mit Zitat antworten Zitat