Форум » [x]Harbour » Обрыв соединения на SHARED диске ? » Ответить

Обрыв соединения на SHARED диске ?

Andrey: Имею заказчика. У него странная ситуация с моей программой. Сеть из двух компов, сервер (на нем расшаренная папка) и локальная станция. Компы современные, на Win10x64bit Но прога на МиниГуи (Харбор последний) в течении дня несколько раз виснет глухо и всё. Раз 8 за день. Помогает только снятие из диспетчера задач. Соответственно когда прога повисла - из-за чего непонятно, в лог ничего не пишется. Сегодня отловил причину. Кратковременная потеря сетевого соединения ! Вот что в логе: [pre2]Time from start: 0 days 1 hours 32 mins 28 secs Error DBFCDX/1010 Ошибка чтения: \\SERVER\Sklad4.Server\COMMON\NETOPER.DBF (DOS Error 2) --------------------------------- Stack Trace --------------------------------- Called from DBGOTOP(0) [/pre2] Как с этим боротся ? Хотя бы сообщение об ошибки сети получить можно ? Есть ли какие функции для сети. Пробовал при ВИСЯЧЕЙ проге открыть сеть через Проводник, сетевой ресурс открывается. А программа висит... У других моих пользователей таких проблем НЕТ вообще...

Ответов - 53, стр: 1 2 3 All

SergKis: Andrey пишет Есть ли HB_PING для компилятора BCC 5.5 ? Может просто воспользоваться ping.exe с протоколом для проверки 0 потерянных блоков, с erroelevel 1 при ошибке и ... usage: ping [-t] [-a] [-n счетчик] [-l размер] [-f] [-i TTL] [-v тип] [-r счетчик] [-s счетчик] [{-j список_узлов | -k список_узлов}] [-w интервал] [имя_конечного_компьютера] PS Проверку вынести на планировщик в периодичность по времени, не загружать свою программу, путь работает bat файл, например, такой (с полей интернета)[pre2] @echo off cls ping racer | find "Packets: Sent = 4, Received = 4, Lost = 0 (0% loss)," if not errorlevel 1 set error=success if errorlevel 1 set error=failure cls echo Result: %error% pause [/pre2] Можешь красиво оформить запуск своей программой и сообщать об ошибках, вести лог и т.д. При обнаружении ошибки можешь закрывать свою основную программу

Andrey: Я понял почему мои юзера жалуются на работу моей проги. Если комп ушёл в спящий режим, то после того как юзер его разбудил - локальная сеть и инет какое то время НЕ ДОСТУПНЫ любым программам. Соответсвенно PING из моей программы на сервер не пройдёт !!! Какой механизм в программе можно придумать для исключения таких ситуаций ? Как определить у себя в программе, что программа вышла их спящего режима и повесить задержку чтобы комп проснулся ? Можно окно повесить с сообщением "Комп вышел из спящего режима !"

PSP: Andrey пишет: Если комп ушёл в спящий режим, то после того как юзер его разбудил - локальная сеть и инет какое то время НЕ ДОСТУПНЫ любым программам. Соответсвенно PING из моей программы на сервер не пройдёт !!! БИНГО!!!)))


PSP: Andrey пишет: Какой механизм в программе можно придумать для исключения таких ситуаций ? https://learn.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-setthreadexecutionstate Как это прилепить к харбору, не подскажу.

Dima: PSP пишет: Как это прилепить к харбору, не подскажу. этот вопрос уже всплывал :)

PSP: Dima пишет: этот вопрос уже всплывал :) А кто задавал?))

Dima: http://clipper.borda.ru/?1-4-0-00001375-000-10001-0-1690466675 Вот тема и некий Andrey там еще и пример свой выложил

PSP: Dima пишет: некий Andrey там еще и пример свой выложил Тогда у него нет проблем

Dima: PSP пишет: Тогда у него нет проблем

Andrey: Dima пишет: Вот тема и некий Andrey там еще и пример свой выложил SergKis пишет: Добавил в пример Андрея Да я не смотрел чем тема завершилась. Занят был и пропустил, а вот и потребовалось тоже.

Dima: Andrey пишет: Error E2209 hbping.c 58: Unable to open include file 'icmpapi.h' Можно пробнуть вот это там нет 'icmpapi.h'

Andrey: Dima пишет: Можно пробнуть вот это Да нет, это не пойдёт, там #include "FiveLinux.ch", выдаёт кучу ошибок. А разве нельзя загрузить DLL из системы и получить ping ? В МиниГуи полно же фишек загрузок системных DLL, типа такого: [pre2]HMG_CallDLL ("GDI32.DLL", HB_DYN_CTYPE_INT, "AddFontResourceEx", cFontFile, FR_PRIVATE+FR_NOT_ENUM, 0) [/pre2]

Andrey: Фиг с этим BCC 5.5, перехожу на BCC 5.8 Решил свою проблему показа иконок. В исходнике который есть, выходит предупреждение. [pre2]OBJ\demo_ping.c: Warning W8084 demo_ping.prg 113: Suggest parentheses to clarify precedence in function hb_Ping2 Исходник: WSADATA wsaData; int iResult; iResult = WSAStartup( MAKEWORD(2, 2), &wsaData ); // строка 113 if( iResult == 0 ) [/pre2] Как его убрать ?

Haz: Andrey пишет: Как его убрать ? Пишет же поставить круглые скобки. Тут разжеван код ошибки W8084 https://www.hardforum.ru/t69116/

Pasha: можно заменить макрос: iResult = WSAStartup( HB_MKUSHORT(2, 2), &wsaData ); или сделать еще проще: iResult = WSAStartup( 0x0202, &wsaData );

Andrey: Haz , Pasha - СПАСИБО ! Отправил примеры с PING Григорию...

Dima: Andrey пишет: Да нет, это не пойдёт, там #include "FiveLinux.ch", выдаёт кучу ошибок. Да , это я маху дал

Andrey: Два разных заказчика жалуются мне что ошибка(окно) по HB_PING2 часто появляется... Админ пишет что с сетью все в порядке, потерь пакетов до сервера нет. А HB_PING2 выдаёт ошибку. Почему ? [pre] IF AT("\\",cPathServer) > 0 cNameServer := SUBSTR(cPathServer,3) cNameServer := SUBSTR(cNameServer,1,AT("\",cNameServer)-1) lRet := HB_PING2(cNameServer) IF ! lRet cMsg := " СЕРВЕР НЕ ДОСТУПЕН !;" cMsg += 'НЕТ доступа к сетевому ресурсу !;' cMsg += cPathServer + ";;" AlertStop( cMsg, "Ошибка доступа" ) lRet := .F. ENDIF ELSE lRet := .T. // это локальный компьютер ENDIF [/pre]

PSP: Andrey пишет: Админ пишет что с сетью все в порядке, потерь пакетов до сервера нет. Ты пингуешь сервер по имени или ip-адресу?

Andrey: По имени - cNameServer := "\\Сервер\ресурс"



полная версия страницы