Autor Beitrag
stigge
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 426

WinXP
Delphi 2007
BeitragVerfasst: Mo 14.07.08 18:59 
Hallo,

ich benutze momentan diese 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 user profile iconNarses: Titel geändert am 24.07.2008, 00:11.
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mo 14.07.08 19:41 
Titel: Re: Broadcast empfangen
Moin!

user profile iconstigge 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:

user profile iconstigge 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... :?
ausblenden volle Höhe 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, 000, 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

_________________
There are 10 types of people - those who understand binary and those who don´t.
stigge Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 426

WinXP
Delphi 2007
BeitragVerfasst: Mo 14.07.08 20:56 
Titel: Re: Broadcast empfangen
user profile iconNarses 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 :)

user profile iconNarses 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mo 14.07.08 21:03 
Titel: Re: Broadcast empfangen
Moin!

user profile iconstigge hat folgendes geschrieben:
user profile iconNarses 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] ;)

user profile iconstigge 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

_________________
There are 10 types of people - those who understand binary and those who don´t.