Entwickler-Ecke
Internet / Netzwerk - Broadcast in Konsolen-Anwendung empfangen
stigge - Mo 14.07.08 18:59
Titel: Broadcast in Konsolen-Anwendung empfangen
Hallo,
ich benutze momentan
diese [
http://www.delphi-forum.de/viewtopic.php?t=55339&highlight=udpsockutil] Komponente, um einen UDP-Broadcast zu empfangen. Allerdings benötigt sie ein Fenster, um zu funktionieren.
Jetzt meine Frage:
Kann man auch Broadcasts ohne Handles empfangen (z.B in einer Konsolenanwendung) und wenn ja wie?
Momentan versteckte ich einfach das Empfänger-Fenster, aber es muss doch noch eine bessere Lösung geben^^
Moderiert von
Narses: Titel geändert am 24.07.2008, 00:11.
Narses - Mo 14.07.08 19:41
Titel: Re: Broadcast empfangen
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. :nixweiss:
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... :?
Delphi-Quelltext
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. :idea:
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
stigge - Mo 14.07.08 20:56
Titel: Re: Broadcast empfangen
Narses hat folgendes geschrieben: |
Was hältst du davon, wenn du den Titel des Threads etwas erweiterst: "Broadcasts mit TUdpSockUtil in Konsolen-App" |
Nichts, muss ja nicht unbedingt mit TUdpSockUtil laufen :)
Narses hat folgendes geschrieben: |
Also, ehrlich gesagt: dafür (=Konsole) ist die Kompo nicht "gebaut", evtl. besser eine Andere nehmen. |
Kennst du (oder irgendjemand) eine geeignete?
Narses - Mo 14.07.08 21:03
Titel: Re: Broadcast empfangen
Moin!
stigge hat folgendes geschrieben: |
Narses hat folgendes geschrieben: | Was hältst du davon, wenn du den Titel des Threads etwas erweiterst: "Broadcasts mit TUdpSockUtil in Konsolen-App" | Nichts, muss ja nicht unbedingt mit TUdpSockUtil laufen :) |
Die Information "
in Konsolen-App" ist aber schon sehr wichtig, [mod=on] deshalb möchte ich dich bitten, zumindest das im Titel zu ergänzen. [mod=off] ;)
stigge hat folgendes geschrieben: |
Kennst du (oder irgendjemand) eine geeignete? |
Wenn es nicht mit Ereignissen (und über Nachrichten) laufen soll, dann bleiben nur blocking-socket-calls und Threads. :idea:
Kann ich aus dem Kopf nicht beantworten, aber können das die Indy-UDP-Kompos nicht? :nixweiss:
cu
Narses
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!