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 one of 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 is in the Release (r37) broken because of this bug: http://www.mail-archive.com/synalist-public@lists.sourceforge.net/msg00731.html Latest release or Snapshots are OK!