Dahua NetSDK Ошибка 22: NET_RETURN_DATA_ERROR — Повреждение данных ответа
Сбои при получении конфигурации или статусов от оборудования:
- Функции
CLIENT_GetNewDevConfig,CLIENT_QueryDevStateилиCLIENT_GetDevConfigвозвращаютFALSEс ошибкой22. - Частичный прием данных: структуры заполняются мусорными байтами.
- В логах фиксируются ошибки десериализации JSON/RPC пакетов.
Код NET_RETURN_DATA_ERROR (22) свидетельствует о том, что устройство вернуло ответ, который SDK не смог распарсить (нарушена структура пакета, размер заголовка не соответствует телу, повреждена кодировка строк).
1. Проверка структуры параметров (dwSize initialization)
Главная причина ошибки — неинициализированное поле dwSize во входных/выходных структурах. SDK строго сверяет версию структуры по ее размеру:
NET_IN_GET_CAMERA_INFO stIn = { sizeof(stIn) }; // Обязательная инициализация размера!
NET_OUT_GET_CAMERA_INFO stOut = { sizeof(stOut) };
if (!CLIENT_GetCameraInfo(lLoginID, &stIn, &stOut, 5000)) {
DWORD dwErr = CLIENT_GetLastError(); // Если dwSize не задан -> Ошибка 22
}2. Несовместимость версий прошивки и NetSDK
- Новые прошивки Dahua перешли на протокол управления
JSON-RPC / DH-REST. Если используется устаревшая сборка NetSDK (старше 2-3 лет), она не сможет разобрать новые форматы ответов регистратора. - Решение: Обновите библиотеки
dhnetsdk.dll/libdhnetsdk.soдо актуальной релизной версии General NetSDK.
3. Проверка целостности MTU и сетевых шлюзов
Проверьте промежуточные VPN/маршрутизаторы. Если сетевое оборудование обрезает TCP-пакеты (TCP MSS Clamping), SDK получает усеченный пакет и выдает ошибку 22.
Частые вопросы (FAQ)
Почему ошибка 22 чаще возникает на функциях GetConfig, чем на видеопотоке?
Конфигурации передаются сложными структурированными блоками XML/JSON, где любое выпадение байта ломает парсер, в то время как видеопоток декодируется покадрово с компенсацией потерь.
Что делать, если ошибка 22 возникает только для одного канала NVR?
Проверьте статус подключения этой конкретной IP-камеры к NVR: если камера оффлайн или сбоит по протоколу ONVIF, регистратор вернет пустой/невалидный ответ по ее конфигурации.
Как переключить SDK на работу по чистому JSON-RPC протоколу?
Используйте интерфейс CLIENT_QueryDevInfo / CLIENT_GetNewDevConfig с флагами передачи параметров в формате JSON (CFG_CMD_...).
Влияет ли кодировка локали Windows (ANSI vs UTF-8) на эту ошибку?
Да, если имя канала содержит кириллицу или спецсимволы, а SDK скомпилирован без поддержки UTF-8, парсер может сбоить при чтении строк.