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

如何用Python接收LIDAR设备发送的UDP数据包?

解决UDP接收LIDAR数据的Socket错误问题

错误原因分析

  • WinError 10049:你尝试绑定LIDAR的IP(192.168.1.201),但该IP不属于你的PC,Socket绑定仅能指定本机存在的网络接口IP,或用0.0.0.0代表监听所有本机IP。
  • 绑定PC IP后挂起无输出:默认Socket为阻塞模式,若绑定的端口不是LIDAR发送的目标端口(或绑定配置有误),程序会一直等待数据。需确认LIDAR确实向PC的2368端口发送数据。
  • WinError 10035:非阻塞模式下,无数据可接收时调用recv()会直接抛出该错误,需通过异常捕获或IO多路复用处理此场景。

正确实现代码

方式1:阻塞模式(推荐,简单可靠)

该模式下Socket会等待直到收到数据,适合确认有稳定数据传输的场景:

import socket

# 配置参数
PC_IP = "192.168.1.202"
LISTEN_PORT = 2368  # LIDAR发送数据的目标端口

# 创建UDP socket
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 绑定本机IP和监听端口,也可用0.0.0.0监听所有接口
sock.bind((PC_IP, LISTEN_PORT))

print(f"等待接收LIDAR数据,绑定地址:{PC_IP}:{LISTEN_PORT}")

try:
    while True:
        # 接收数据,bufsize设为LIDAR数据包的大小,4096适配多数场景
        data, addr = sock.recvfrom(4096)
        print(f"收到来自{addr}的数据:{data}")
        # 若需转字符串,可根据LIDAR编码格式处理,例如utf-8:
        # print(f"收到来自{addr}的字符串数据:{data.decode('utf-8')}")
finally:
    sock.close()

方式2:非阻塞模式(配合异常捕获)

若需同时处理其他任务,可使用非阻塞模式,捕获无数据时的异常:

import socket
import time

PC_IP = "192.168.1.202"
LISTEN_PORT = 2368

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind((PC_IP, LISTEN_PORT))
sock.setblocking(0)  # 设置为非阻塞模式

print(f"非阻塞模式监听LIDAR数据:{PC_IP}:{LISTEN_PORT}")

try:
    while True:
        try:
            data, addr = sock.recvfrom(4096)
            print(f"收到来自{addr}的数据:{data}")
        except BlockingIOError:
            # 无数据时执行其他操作,或短暂休眠
            time.sleep(0.01)
finally:
    sock.close()

验证要点

  1. 用Wireshark确认UDP数据包的目标端口确实为2368。
  2. 若不确定本机IP,直接用0.0.0.0代替192.168.1.202,监听所有本机网络接口的对应端口,避免IP配置错误。
  3. 运行代码前关闭可能占用2368端口的其他程序,避免端口占用导致绑定失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 07:33:20