也许对此的解决方案非常简单,我只是太愚蠢了。 我需要使用Indy 10重新编译一个旧的应用程序,而这一行曾经是
inUDPServer.Binding.SetSockOpt(Id_IPPROTO_IP, Id_IP_ADD_MEMBERSHIP, PChar(@mreq), SizeOf(mreq));
但新的TIdSocketHandle.SetSockOpt需要3个整数。 现在我该如何提供ip_mreq?只是传递imr_multiaddr.S_addr会导致#10014错误 - 缓冲区错误。 也许你们其中一个人有个主意。
干杯安迪
答案 0 :(得分:1)
使用TIdSocketHandle.AddMulticastMembership()
方法(如果您的Indy 10版本没有该方法可用,那么您必须先更新到更新的快照),例如:
inUDPServer.Binding.AddMulticastMembership('Group IP address');
它将TIdSocketHandle.IP
地址添加到指定组IP的成员资格中。 IP可以指定为IPv4或IPv6,具体取决于TIdSocketHandle.IPVersion
属性的设置。
或者,请考虑直接使用TIdIPMCastServer
和TIdIPMCastClient
组件而不是TIdUDPServer
。