AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Indy: mehrere UDP-Server auf einem Port
Thema durchsuchen
Ansicht
Themen-Optionen

Indy: mehrere UDP-Server auf einem Port

Ein Thema von Brüggendiek · begonnen am 11. Okt 2004 · letzter Beitrag vom 13. Okt 2004
 
Basilikum

Registriert seit: 9. Aug 2003
389 Beiträge
 
Delphi 7 Professional
 
#4

Re: Indy: mehrere UDP-Server auf einem Port

  Alt 12. Okt 2004, 22:05
Hallo Dietmar

ich habe soeben bemerkt, dass die Methode GetBinding() von TIdUDPServer virtual definiert ist. Dies ermöglicht es, trotzdem die Klasse TIdUDPServer zu verwenden:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IdUDPServer, IdStackConsts, IdSocketHandle, StdCtrls;

type
  TUDPServer = Class(TIdUDPServer)
  Protected
    function GetBinding: TIdSocketHandle; override;
  end;

  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    _UDPServer : TUDPServer;
    { Private declarations }
  public
    { Public declarations }
    procedure UDPRead(Sender: TObject; AData: TStream; ABinding: TIdSocketHandle);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function TUDPServer.GetBinding: TIdSocketHandle;
var
  i: integer;
begin
  if not Assigned(FCurrentBinding) then
  begin
    if Bindings.Count < 1 then begin
      Bindings.Add;
    end;
    for i := 0 to Bindings.Count - 1 do begin
      Bindings[i].AllocateSocket(Id_SOCK_DGRAM);
      Bindings[i].SetSockOpt(Id_SOL_SOCKET,Id_SO_REUSEADDR,@Id_SO_True,SizeOf(Bool)); // Bis auf diese Zeile ist alles kopiert von TIdUDPServer
      Bindings[i].Bind;
    end;
    FCurrentBinding := Bindings[0];
    FListenerThread := TIdUDPListenerThread.Create(BufferSize, Self);
    FListenerThread.Start;
    BroadcastEnabledChanged;
  end;
  Result := FCurrentBinding;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  // Dies ist nur notwendig, da ich die Indy-Palette nicht installiert habe.... ansonsten per OI
  _UDPServer:=TUDPServer.Create(Self);

  _UDPServer.DefaultPort:=4444;
  _UDPServer.Active:=True;

  _UDPServer.OnUDPRead:=UDPRead;
end;

procedure TForm1.UDPRead(Sender: TObject; AData: TStream; ABinding: TIdSocketHandle);
Var
  S : String;
Begin
  SetLength(S,4);
  AData.Read(S[1],4);

  Caption:=S;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  _UDPServer.Broadcast('test',4444);
end;

end.
Gruss Basilikum
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:57 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