题
也许对此的解决方案非常简单,我太愚蠢了,无法看到它。我需要用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错误 - 缓冲区故障。也许你们中的一个有一个主意。
欢呼安迪
解决方案
使用 TIdSocketHandle.AddMulticastMembership()
方法(如果您的Indy 10版本没有可用的方法,那么您必须先更新到较新的快照),例如:
inUDPServer.Binding.AddMulticastMembership('Group IP address');
它添加了 TIdSocketHandle.IP
指定组IP成员的地址。 IP可以指定为IPv4或IPv6,具体取决于设置 TIdSocketHandle.IPVersion
财产。
或者,考虑使用 TIdIPMCastServer
和 TIdIPMCastClient
组件而不是 TIdUDPServer
直接地。
不隶属于 StackOverflow