![]() |
IdUDPServer.UDPRead wird nicht aufgerufen
Hallo,
ich hab ein kleines Problem mit dem UDP Server von den Indys in einem Konsolenprogramm: UDPRead wird nicht aufgerufen. Der Broadcast funktioniert und die Antwort kommt auch (mit Wireshark überprüft). udp.ReceiveString funktioniert auch. Was mach ich falsch?
Delphi-Quellcode:
type
TUDPRead = class procedure UDPRead(Sender: TObject; AData: TBytes; ABinding: TIdSocketHandle); end; var readUDP : TUDPRead; udp : TIdUDPServer; procedure TUDPRead.UDPRead(Sender: TObject; AData: TBytes; ABinding: TIdSocketHandle); begin Writeln('read'); end; begin udp := TIdUDPServer.Create(nil); udp.OnUDPRead := readUDP.UDPRead; udp.Broadcast(cast, 1900); ReadLn; end. |
Re: IdUDPServer.UDPRead wird nicht aufgerufen
1. readUDP wurde nicht instanziert. Dies verursacht Zugriffsverletzungen, wenn du in der Methode UDPRead auf Felder
zugreifst. 2. Zumindest die Windows-Sockets arbeiten mit Nachrichten, sodass du ohne Nachrichtenschleife keine Chance hast. Es kann sein, dass es bei den Indys ebenso ist. |
Re: IdUDPServer.UDPRead wird nicht aufgerufen
Deaktiviere mal den SSDP Dienst und falls du hast den WindowsMessenger und probier ob es dann läuft.
Gruß Richard |
Re: IdUDPServer.UDPRead wird nicht aufgerufen
Zitat:
Mit Nachrichtenschleife hab ichs auch schon probiert, ändert nix:
Delphi-Quellcode:
Und was meinst du mit instanzieren?
repeat
while PeekMessage(Msg, 0, 0, 0, PM_REMOVE) do begin TranslateMessage(Msg); DispatchMessage(Msg); end; until canclose; Edit: In ner normalen VCL Anwendung läufts... |
Re: IdUDPServer.UDPRead wird nicht aufgerufen
Zitat:
|
Re: IdUDPServer.UDPRead wird nicht aufgerufen
Damit der UDP Server eine Antwort empfangen kann, muss ihm eine lokale Portnummer
zugewiesen werden. Sonst wäre die Portnummer = 0, und das ist nicht zulässig. Ausserdem muss der Komponente "gesagt" werden, das jetzt der eingestellte Port abgehört werden soll. Da fehlt ein .Listen oder wie auch immer das Property oder die Methode heisen mag. |
Re: IdUDPServer.UDPRead wird nicht aufgerufen
Habs nun so versucht:
Delphi-Quellcode:
Geht auch net! Fehler: Socket Error # 10038 Socket Operation on non-socket.
udp.Bindings.DefaultPort := 2000;
socket := TIdSocketHandle.Create(udp.Bindings); socket.Listen(); Ich versteh allerdings auch net wieso das alles nicht nötig ist wenn ichs mit VCL mach... |
Re: IdUDPServer.UDPRead wird nicht aufgerufen
lass mich jetzt mal raten, an port 1900 kontest du es nicht binden richtig?
|
Re: IdUDPServer.UDPRead wird nicht aufgerufen
Delphi-Quellcode:
udp := TIdUDPServer.Create(nil);
udp.OnUDPRead := readUDP.UDPRead; udp.DefaultPort := 2000; // <=== udp.Active := True; // <=== udp.Broadcast(cast, 1900); |
Re: IdUDPServer.UDPRead wird nicht aufgerufen
Zitat:
@shmia: Dein Code geht leider auch nicht :? Naja egal trotzdem danke euch allen für die Hilfe, ich werds jetzt eben irgendwie mit ReceiveString lösen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:42 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz