You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Indy TIdIPMCastServer发送组播消息时遭遇Socket Error #10065无主机路由问题排查

解决Indy TIdIPMCastServer发送组播时的Socket Error #10065(无主机路由)问题

我来帮你排查这个组播发送报错的问题,Socket Error 10065本质是系统找不到通往目标组播地址的有效路由,结合你的代码来看,核心问题和修复方案如下:

1. 组件使用错误:用错了发送组播的组件

你当前用的TIdIPMCastServer是专门用来接收组播消息的组件,它的设计目的是监听指定组播地址的 incoming 流量,而非主动发送组播包。这是导致报错的最关键原因——用接收组件去做发送操作,自然会出现路由相关的错误。

正确的做法是使用TIdIPMCastClient组件来发送组播消息。

2. 修正后的代码实现

我把你的代码调整为使用TIdIPMCastClient,同时简化了发送逻辑(不需要额外的TBytesStream,Indy本身提供了更便捷的编码方法):

unit MCSender;
interface
uses Classes, IdGlobal, IdIPMCastClient;
type
  TSBUDPSender = class(TComponent)
  private
    FMCSender: TIdIPMCastClient;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    procedure Send(Data: string); overload;
  end;
implementation
uses SysUtils;
{ TSBUDPSender }
constructor TSBUDPSender.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FMCSender := TIdIPMCastClient.Create(Self);
  FMCSender.IPVersion := Id_IPv4;
  FMCSender.MulticastGroup := '224.0.0.1';
  FMCSender.Port := 19151;
  
  // 重要提示:如果你的机器有多个网卡,必须指定发送组播包的出口IP
  // 比如你的本地网卡IP是192.168.1.100,就设置:
  // FMCSender.BoundIP := '192.168.1.100';
end;
destructor TSBUDPSender.Destroy;
begin
  FMCSender.Free;
  inherited;
end;
procedure TSBUDPSender.Send(Data: string);
var
  SendBytes: TIdBytes;
begin
  // TIdIPMCastClient无需提前激活,发送时会自动处理底层连接
  SendBytes := IndyTextEncoding_UTF8.GetBytes(Data);
  FMCSender.Send(SendBytes);
end;
procedure Test;
var
  SBSender: TSBUDPSender;
begin
  SBSender := TSBUDPSender.Create(nil);
  try
    SBSender.Send('ABC');
  finally
    SBSender.Free;
  end;
end;
initialization
  Test;
end.

3. 其他可能的排查点

如果替换组件后仍然报错,你可以检查以下几点:

  • 网卡与路由配置:执行route print(Windows)或ip route show(Linux),确认存在224.0.0.0/4的组播路由条目;如果有多网卡,一定要通过BoundIP指定正确的出口网卡,否则系统可能选择一个不支持组播的网卡。
  • 防火墙拦截:Windows防火墙或第三方安全软件可能默认拦截组播UDP流量,需要添加允许UDP 19151端口的规则。
  • 跨子网组播限制:如果你的客户端在其他子网,需要网络中的路由器支持IGMP协议,否则组播包无法跨子网传输(224.0.0.1是本地子网组播地址,默认只能在同一子网内传播)。

内容的提问来源于stack exchange,提问作者Sebastian Z

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 07:03:14