也许对此的解决方案非常简单,我太愚蠢了,无法看到它。我需要用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 财产。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top