Delphi Indy 10和设置插座选项
也许解决这个问题的方法很简单,我只是太傻了,看不见。 我需要用Indy 10重新编译一个旧的应用程序,这行代码曾经是Delphi Indy 10和设置插座选项,delphi,indy10,Delphi,Indy10,也许解决这个问题的方法很简单,我只是太傻了,看不见。 我需要用Indy 10重新编译一个旧的应用程序,这行代码曾经是 inUDPServer.Binding.SetSockOpt(Id_IPPROTO_IP, Id_IP_ADD_MEMBERSHIP, PChar(@mreq), SizeOf(mreq)); 但是新的TIdSocketHandle.SetSockOpt需要3个整数。 现在我应该如何提供ip_mreq?仅仅传递imr#u multiaddr.S#u addr就会导致#10014
inUDPServer.Binding.SetSockOpt(Id_IPPROTO_IP, Id_IP_ADD_MEMBERSHIP, PChar(@mreq), SizeOf(mreq));
但是新的TIdSocketHandle.SetSockOpt需要3个整数。
现在我应该如何提供ip_mreq?仅仅传递imr#u multiaddr.S#u addr就会导致#10014错误-缓冲区故障。
也许你们当中有人有主意
干杯Andy请改用
TIdSocketHandle.AddMulticastMembership()
方法(如果您的Indy 10版本没有该方法,则必须先更新到较新的快照),例如:
它将TIdSocketHandle.IP
地址添加到指定组IP的成员身份中。IP可以指定为IPv4或IPv6,具体取决于TIdSocketHandle.IPVersion
属性的设置
可选地,考虑使用<代码> TIDIPMCASServer 和<代码> TIdipMcStaseCudio组件,而不是直接>代码> TIDUPDPServer < /C> > .< /P>
使用<代码> TeToSokEththle。AddioMultuMaskSub()/<代码>方法代替(如果您的Indy 10版本没有该方法,则必须首先更新到较新的快照),例如:
它将TIdSocketHandle.IP
地址添加到指定组IP的成员身份。根据TIdSocketHandle.IPVersion
属性的设置,可以将IP指定为IPv4或IPv6
可选地考虑使用<代码> TIDIPMCASServer < /C>和<代码> TIdipMcStaseCudio组件,而不是直接>代码> TIDUPDPSServer 。
inUDPServer.Binding.AddMulticastMembership('Group IP address');