1

也许解决这个问题的方法很简单,我只是太笨了,看不到它。我需要用 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 错误 - 缓冲区错误。也许你们中的一个人有一个想法。

干杯安迪

4

1 回答 1

1

请改用该TIdSocketHandle.AddMulticastMembership()方法(如果您的 Indy 10 版本没有该方法可用,那么您必须先更新到较新的快照),例如:

inUDPServer.Binding.AddMulticastMembership('Group IP address');

它将TIdSocketHandle.IP地址添加到指定组 IP 的成员资格中。IP 可以指定为 IPv4 或 IPv6,具体取决于TIdSocketHandle.IPVersion属性的设置。

或者,考虑使用TIdIPMCastServerandTIdIPMCastClient组件而不是TIdUDPServer直接使用。

于 2011-01-19T22:55:19.773 回答