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

接收mDNS多播消息时遭遇WinError 10049错误的技术求助

解决WinError 10049:Windows下接收mDNS消息的问题

错误原因

Windows系统不允许直接将UDP套接字绑定到多播地址(如224.0.0.251),这是触发OSError: [WinError 10049]的核心原因,和端口是否被占用无关。

修复方案

将套接字绑定到所有可用网络接口(而非多播地址),同时保留多播组加入的逻辑,即可正常接收mDNS消息。

修改后的代码

import struct
import socket

MCAST_GRP = '224.0.0.251'
MCAST_PORT = 5353
IS_ALL_GROUPS = False

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
# Windows下必须绑定到所有接口,不能直接绑定多播地址
sock.bind(('', MCAST_PORT))

mreq = struct.pack("4sL", socket.inet_aton(MCAST_GRP), socket.INADDR_ANY)
sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)

# 补充endLoop的定义,或替换为while True
endLoop = 0
while endLoop == 0:
    data, addr = sock.recvfrom(10240)
    print(f"Received message from {addr}:\n{data}")

关键说明

  • 绑定('', MCAST_PORT)等价于绑定('0.0.0.0', MCAST_PORT),表示监听本机所有网络接口的5353端口。
  • IP_ADD_MEMBERSHIP选项确保套接字加入224.0.0.251多播组,只会接收发往该组的消息,和IS_ALL_GROUPS=False的预期一致。
  • 如果需要接收所有多播组的消息,只需移除IP_ADD_MEMBERSHIP的设置即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 22:10:09