Moin!
stigge hat folgendes geschrieben: |
Kann man auch Broadcasts ohne Handles empfangen (z.B in einer Konsolenanwendung) und wenn ja wie? |
Der
TUdpSockUtil ist speziell für ereignisorientierte Anwendungen geschrieben, es soll also hauptsächlich in einer
TApplication-Umgebung laufen. Soviel vorab.
stigge hat folgendes geschrieben: |
Momentan versteckte ich einfach das Empfänger-Fenster, aber es muss doch noch eine bessere Lösung geben^^ |
Sagen wir mal, es gibt eine; ob sie
besser ist, das ist eine ganz andere Frage...
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46:
| program Test;
{$APPTYPE CONSOLE}
uses SysUtils, Windows, UdpSockUtil, WinSock;
type TEventAdapter = class(TObject) public procedure OnReceive(Sender: TObject); end;
var UDP: TUdpSockUtil; EventAdapter: TEventAdapter; AMessage: TMsg;
procedure TEventAdapter.OnReceive(Sender: TObject); var IP: in_addr; Text: String; begin Text := UDP.ReceiveText(IP); WriteLn(inet_ntoa(IP)+': '+Text); end;
begin UDP := TUdpSockUtil.Create(NIL); EventAdapter := TEventAdapter.Create; try UDP.LocalPort := 12345; UDP.Open; UDP.OnReceive := EventAdapter.OnReceive; repeat while PeekMessage(AMessage, 0, 0, 0, PM_REMOVE) do begin TranslateMessage(AMessage); DispatchMessage(AMessage); end; Sleep(100); until GetAsyncKeyState(VK_SHIFT) <> 0; finally EventAdapter.Free; UDP.Free; end; end. |
Du brauchst eine eigene MessageLoop, damit die Ereignisse abgearbeitet werden.
Also, ehrlich gesagt: dafür (=Konsole) ist die Kompo nicht "gebaut", evtl. besser eine Andere nehmen.

Das wird nur hässliches Gestricke...
Was hältst du davon, wenn du den Titel des Threads etwas erweiterst: "
Broadcasts mit TUdpSockUtil in Konsolen-App"?
cu
Narses
There are 10 types of people - those who understand binary and those who don´t.