This is an old revision of the document!


How To Use UDP Multicasts.

This is few examples of using multicasts from SynaList. It is based on multicast demo from Microsoft MSDN.

Description: 234.5.6.7:22401 is any class D IP address + port

procedure MulticastSendTest;
var
  sndsock:TUDPBlockSocket;
begin
  sndsock:=TUDPBlockSocket.Create;
  try
    sndsock.createsocket;
    sndsock.Bind('0.0.0.0','0');
    sndsock.MulticastTTL := 1;
    sndsock.connect('234.5.6.7','22401');
    sndsock.SendString('Ahoy!'+CRLF);
  finally
    sndsock.free;
  end;
end;
 
procedure MulticastRecvTest;
var
  rcvsock:TUDPBlockSocket;
  buf:string;
begin
  rcvsock:=TUDPBlockSocket.Create;
  try
    rcvsock.createsocket;
    rcvsock.Bind('0.0.0.0','22401');
    rcvsock.AddMulticast('234.5.6.7');
    buf:=rcvsock.RecvPacket(60000);
    showmessage(buf);
  finally
    rcvsock.free;
  end;
end;

…or this test in one procedure:

procedure multicasttest;
var
  sndsock:TUDPBlockSocket;
  rcvsock:TUDPBlockSocket;
  buf:string;
begin
  sndsock:=TUDPBlockSocket.Create;
  rcvsock:=TUDPBlockSocket.Create;
  try
    rcvsock.createsocket;
    rcvsock.Bind('0.0.0.0','22401');
    rcvsock.AddMulticast('234.5.6.7');
    Assert(rcvsock.LastError = 0);
 
    sndsock.createsocket;
    sndsock.Bind('0.0.0.0','0');
    sndsock.MulticastTTL := 1;
    sndsock.connect('234.5.6.7','22401');
    Assert(sndsock.LastError = 0);
 
    sndsock.SendString('Test Payload');
    buf:=rcvsock.RecvPacket(1000);
    showmessage(buf);
 
    sndsock.CloseSocket;
    rcvsock.CloseSocket;
  finally
    sndsock.free;
    rcvsock.free;
  end;
end;

:!: Note: The MultiCast-Support in the current Release (r37) is broken because of this bug: http://www.mail-archive.com/synalist-public@lists.sourceforge.net/msg00731.html In the newest Snapshot it works perfectly.

public/howto/udpmulticast.1196260793.txt.gz · Last modified: 2007/11/30 14:30 (external edit)
Driven by DokuWiki Recent changes RSS feed