Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты на сайте предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, программного обеспечения, баз данных, сетевого оборудования и других компонентов инфраструктуры. Перед выполнением действий создайте резервную копию и по возможности протестируйте изменения в безопасной среде. Пользователь самостоятельно оценивает риски и несет ответственность за результат. При отсутствии необходимых знаний обратитесь к квалифицированному ИТ-специалисту.

NET_ALARM_LISTEN_ERROR (38) IP-Телефония и СКУД

Dahua NetSDK Ошибка 38: NET_ALARM_LISTEN_ERROR — сбой службы тревог

Обновлено: 24.08.2026 · Официальная документация ↗
  • Функция CLIENT_StartListenEx или CLIENT_StartListen возвращает FALSE с кодом 38.
  • Сервер мониторинга не получает тревожные события детекции движения, срабатывания сухих контактов, тамперов или событий прохода СКУД.
  • Входящие оповещения по протоколу Alarm Hub блокируются брандмауэром ОС.

1. Проверка сигнатуры и параметров функции StartListenEx

Убедитесь, что callback-функция определена глобально и не собирается сборщиком мусора (GC в C#/Java):

// Определение коллбека тревог
BOOL CALLBACK MessCallBackEx(LONG lCommand, char *pBuf, DWORD dwBufLen, char *pCustomParam) {
    printf("Alarm event received! Command ID: 0x%x\n", lCommand);
    // Обработка структур: NET_ALARM_ALARM_EX, NET_ACCESS_CTL_EVENT_INFO и др.
    return TRUE;
}

// Регистрация слушателя событий
CLIENT_SetDVRMessCallBackEx1(MessCallBackEx, 0);
BOOL bListen = CLIENT_StartListenEx(lLoginHandle);
if (!bListen) {
    printf("StartListen failed, error code: %d\n", CLIENT_GetLastError());
}

2. Проверка сетевого режима подписки на тревоги

Существует два режима: Active Push (камера сама стучится на Alarm Server) и SDK Polling/Long-Polling. При использовании Active Listen порт сервера должен быть открыт на входящие подключения:

# Проверка локального слушающего сокета на стороне хоста интеграции
netstat -tulnp | grep <AlarmPort>
# Открытие порта в UFW / Iptables
ufw allow 37888/tcp

3. Проверка активации Alarm Reporting на стороне устройства

В веб-интерфейсе NVR/IPC перейдите в Event -> Alarm Linkage и проверьте, установлена ли галочка Send to Alarm Center (Отправка на станцию мониторинга).

4. Альтернативный метод подписки через AttachEvent

Для современных устройств рекомендуется использовать более надежный механизм CLIENT_RealLoadPictureEx или CLIENT_AttachEvent:

NET_IN_ATTACH_EVENT stIn = { sizeof(stIn) };
stIn.nChannelID = 0;
stIn.bKeepAlive = TRUE;
NET_OUT_ATTACH_EVENT stOut = { sizeof(stOut) };
LLONG lAttachHandle = CLIENT_AttachEvent(lLoginHandle, &stIn, &stOut, 5000);
💡 Практика специалистов: Если сервер интеграции и регистраторы находятся в разных подсетях с NAT, функция StartListen (работающая через постоянный внутренний сокет) является предпочтительной по сравнению со старыми Alarm Server сокетами (где камера инициирует обратный коннект).

Частые вопросы (FAQ)

Почему CLIENT_StartListenEx завершается успешно, но события не поступают?

В 95% случаев на стороне самой камеры в расписании детектора (Arming Schedule) не включена опция 'Upload to Center' / 'Report to Alarm Server', либо события фильтруются по расписанию.

Нужно ли вызывать CLIENT_StopListen перед разрывом соединения?

Да, обязательно вызывайте CLIENT_StopListen(lLoginHandle) до вызова CLIENT_Logout, иначе на стороне устройства удерживается дескриптор службы оповещения.

Как избежать падения C# приложения при получении тревог (Callback on GC)?

Переменная делегата коллбека fMessCallBack должна быть объявлена как статическое поле класса или зафиксирована через GCHandle.Alloc, чтобы исключить её перемещение сборщиком мусора (Garbage Collector).

Поддерживает ли функция StartListen получение событий распознавания лиц?

Нет, тяжелые события видеоаналитики IVAS (Face, ANPR, People Counting) передаются через специализированные интерфейсы подписки CLIENT_RealLoadPictureEx / CLIENT_AttachEvent.

Полезные материалы
Рекомендуем