Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« : 30-10-2008 05:41 » |
|
есть такой проблем: когда из программы лезешь проверять, есть ли некая папка на другом компе, а на том комп не расшарили папку, то идёт некий таймаут, в течение которого ВИСИМ . Как уменьшить этот таймаут ?
|
|
|
Записан
|
|
|
|
zubr
Гость
|
|
« Ответ #1 : 30-10-2008 07:44 » |
|
Алексей1153++, а как ты проверяешь расшаренность папки?
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #2 : 30-10-2008 07:54 » |
|
net view \\computer - соответственно должен быть какой-то API
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
sss
Специалист
Offline
|
|
« Ответ #3 : 30-10-2008 08:20 » |
|
Алексей1153++, может, не подключенный компьютер, а не только отсутствие шары?
|
|
|
Записан
|
while (8==8)
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #4 : 30-10-2008 08:30 » |
|
Алексей1153++, а как ты проверяешь расшаренность папки?
проверяю наличие при помощи ::FindFirstFile() (если сеть есть и папка расшарена, что это делается мгновенно) net view \\computer - соответственно должен быть какой-то API
вот и вопрос в чём как раз ) sss, всё подключено. Но, даже если и не подключено было бы - это тоже нужная инфа, потому что если нет подключения или папка не существует/не доступна , то нет смысла выполнять функцию дальше (закачка файла из папки, например)
|
|
|
Записан
|
|
|
|
zubr
Гость
|
|
« Ответ #5 : 30-10-2008 08:47 » |
|
Алексей1153++, есть специализированные функции: NetShareEnum, WNetEnumResource.
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #6 : 30-10-2008 09:09 » |
|
о, спасибо ) Ща заценячу
|
|
|
Записан
|
|
|
|
sss
Специалист
Offline
|
|
« Ответ #7 : 30-10-2008 09:13 » |
|
Тот же результ будет. Если компьютер запущен - выполниться запрос к нему и он ответит сразу. А вот если компьютер не запущен, начнется поиск по DNS, WINS или/и широковещанию NBT.
|
|
|
Записан
|
while (8==8)
|
|
|
zubr
Гость
|
|
« Ответ #8 : 30-10-2008 09:25 » |
|
sss, так я так понял, что Алексей1153++ FindFirstFile делает не зная расшаренная папка или нет. В случае если сеть есть, то проверка с помощью вышеуказанных функций будет быстрее. Ну а для проверки сети тоже есть функции.
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #9 : 01-11-2008 18:05 » |
|
Алексей1153++, есть специализированные функции: NetShareEnum, WNetEnumResource.
код, блин, на работе остался, но, в общем, это тоже не то. Список расшареных я так и не добился, выдаёт максимум список компутеров ( Да ещё всё с той же знаменитой задержкой. Вот нельзя ли тупо посмотреть, есть ли конкретная папка (без задержки) \\xxx.xxx.xxx.xxx\sh_folder ? пока решение такое: клиент не ищет папку, пока не может подключиться к программе-серверу. И , даже подключившись, сначала получает конкретный отказ от сервера (проверяется версия) , только потом начинает искать шару. Тогда вероятность тормозов уменьшается
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #10 : 01-11-2008 18:07 » |
|
как вариант есть - запустить процесс, который будет по просьбе клиента проверять обновку и сгружать через свой порт. Но тут есть свои минусы. Как и там, впрочем Дальше жисть покажет, благо что тренироваться есть на ком
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #11 : 04-12-2008 08:14 » |
|
блин, проблема всё же есть - на сервере лежит кучка картинок, которые можно смотреть с клиента в локалке. Если папке не расшарена, программа висит, пока пытается понять это ((( И никак иначе. Что, неужели никик совсем нельзя ускорить процесс проверки ?
|
|
|
Записан
|
|
|
|
sss
Специалист
Offline
|
|
« Ответ #12 : 04-12-2008 08:49 » |
|
Алексей1153++, папка не расшарена, а компьютер включен? Как задается имя шары? Попробуй IP заместо имен...
|
|
|
Записан
|
while (8==8)
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #13 : 04-12-2008 08:56 » |
|
sss, да, забыли, юзеры, скажем, расшарить, или просто создать папку, которая нужна. А операторы сидят, тыкнулись в объект - хотят картинку, а им - висение в ответ )). Та же фигня, если комп с папкой оказался отключен от сети.
доступ итак по IP делаю
\\IP\folder\файл
|
|
|
Записан
|
|
|
|
sss
Специалист
Offline
|
|
« Ответ #14 : 04-12-2008 09:00 » |
|
Алексей1153++, какой тип узла клиента? Поверить -> ipconfig /all
|
|
|
Записан
|
while (8==8)
|
|
|
zubr
Гость
|
|
« Ответ #15 : 04-12-2008 09:03 » |
|
Алексей1153++, я тебе уже предлагал вариант: получаешь список расшаренных папок. Это делаешь однократно, предварительно проверив подключен ли удаленный комп. Не знаю, почему у тебя получается список компов, у меня функция NetShareEnum возвращает список расшаренных ресурсов, причем расширенный список, показывает даже скрытые ресурсы - корневые диски .
|
|
|
Записан
|
|
|
|
sss
Специалист
Offline
|
|
« Ответ #16 : 04-12-2008 09:14 » |
|
Мда... Если указывать FQDN (полное имя DNS), то работает мгновенно. Алексей1153++, у тебя домен c DNS серверами? Указывая FQDN, мы сообщаем Windows об отказе использования NetBIOS при разрешении имен ....
|
|
|
Записан
|
while (8==8)
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #17 : 04-12-2008 09:17 » |
|
zubr, не смог я почему то добиться списка папок... И однократно нет смысла - если доступа не было перед этим, список надо делать снова, а это опять висим, без тормозов никак не выходит у меня Мда... Если указывать FQDN (полное имя DNS), то работает мгновенно. Алексей1153++, у тебя домен c DNS серверами? Указывая FQDN, мы сообщаем Windows об отказе использования NetBIOS при разрешении имен ....
много незнакомых слов ))) На пальцах расскажи?
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #18 : 04-12-2008 09:19 » |
|
Алексей1153++, какой тип узла клиента? Поверить -> ipconfig /all
Имя компьютера . . . . . . . . . : alex-comp Основной DNS-суффикс . . . . . . : Тип узла. . . . . . . . . . . . . : неизвестный IP-маршрутизация включена . . . . : нет WINS-прокси включен . . . . . . . : нет
Подключение по локальной сети - Ethernet адаптер:
DNS-суффикс этого подключения . . : Описание . . . . . . . . . . . . : Intel(R) PRO/1000 PL Network Connect ion Физический адрес. . . . . . . . . : 00-17-31-58-95-7B Dhcp включен. . . . . . . . . . . : нет IP-адрес . . . . . . . . . . . . : 192.168.1.38 Маска подсети . . . . . . . . . . : 255.255.255.0 Основной шлюз . . . . . . . . . . : 192.168.1.1 DNS-серверы . . . . . . . . . . . : 192.168.1.1
|
|
|
Записан
|
|
|
|
sss
Специалист
Offline
|
|
« Ответ #19 : 04-12-2008 09:47 » |
|
Алексей1153++, во вкладке NetBIOS через TCP/IP что выбрано? Вероятно это объясняет, почему не работает то что zubr прописал... А если набрать ping alex-comp, какой будет ответ? Вот мой пример: >ping flame Обмен пакетами с flame.some.com [192.168.0.15] с 32 байт данных:
Ответ от 192.168.0.15: число байт=32 время<1мс TTL=128 Ответ от 192.168.0.15: число байт=32 время<1мс TTL=128 Ответ от 192.168.0.15: число байт=32 время<1мс TTL=128 Ответ от 192.168.0.15: число байт=32 время<1мс TTL=128
Видишь, flame превратился в flame.some.com. Это и есть FQDN. Сейчас покопался в документации, если DNS не находит имя, запрос направляется NetBIOS... Поэтому не поможет FQDN.
|
|
« Последнее редактирование: 04-12-2008 09:51 от sss »
|
Записан
|
while (8==8)
|
|
|
sss
Специалист
Offline
|
|
« Ответ #20 : 04-12-2008 10:00 » |
|
Все таки луше сделать так:
1. С помощью ICMP проверить доступность. 2. Если узел доступен, попытаться подключиться.
Не знаю, у меня если узел доступен, то при попытке подключиться к несуществующей шаре мгновенно выдает ошибку...\
И еще совет. Попробуй в process explorer от Руссиновича или в отладчике поглядеть стэк потока и выяснить, в какой именно системной функции происходит задержка...
|
|
« Последнее редактирование: 04-12-2008 10:05 от sss »
|
Записан
|
while (8==8)
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #21 : 04-12-2008 10:21 » |
|
sss, Обмен пакетами с alex-comp [192.168.1.38] по 32 байт: Превышен интервал ожидания для запроса. Превышен интервал ожидания для запроса. Превышен интервал ожидания для запроса. Превышен интервал ожидания для запроса. 1. С помощью ICMP проверить доступность.
как энто делается ? в отладчике затык происходит в CreateFile, унутрь уже не пускают
|
|
|
Записан
|
|
|
|
sss
Специалист
Offline
|
|
« Ответ #22 : 05-12-2008 02:51 » |
|
Алексей1153++, включены брандмауэры да? Тяжело будет при использовании ICMP... Если включен брандмауэр, то ping эхо не вернется. Однако, если цель в одной сети с источником, то проверить доступность цели можно по наличию динамической записи в таблице ARP, сразу после отправки ICMP.
Смотри MSDN ICMP -> IcmpSendEcho2 ARP ->GetIpNetTable
Покажи код, предшествующий CreateFile...
|
|
|
Записан
|
while (8==8)
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #23 : 05-12-2008 05:01 » |
|
включены брандмауэры
родной виндовских - убит наглухо, поставлен OutPost , там всё , что нужно, можно открыть или запретить Покажи код, предшествующий CreateFile...
Ничего необычного. { HANDLE hFile=0; const char* pchFileName="\\\\xxx.xxx.xxx.xxx\\shared_folder\\file.txt";
//открываем файл (тут и подвисает на некоторое время, если нет доступа) hFile=::CreateFile(pchFileName,GENERIC_READ,0,0,OPEN_EXISTING,0,0); ...
это гляну щас Смотри MSDN ICMP -> IcmpSendEcho2 ARP ->GetIpNetTable
|
|
« Последнее редактирование: 05-12-2008 08:05 от Алексей1153++ »
|
Записан
|
|
|
|
sss
Специалист
Offline
|
|
« Ответ #24 : 05-12-2008 06:42 » |
|
Надо почитать про работу редиректора... Ты файл открываешь или каталог?
|
|
|
Записан
|
while (8==8)
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #25 : 05-12-2008 07:59 » |
|
файл (но, думаю, с каталогом разницы не будет ) ) - я подправил пост, забыл там pchFileName инициализировать
|
|
|
Записан
|
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #27 : 05-12-2008 09:23 » |
|
оо, уже тепло )
поэксперементирую с этим
LmhostsTimeout Key: Netbt\Parameters Value Type: REG_DWORD—time in milliseconds Valid Range: 1000–0xFFFFFFFF Default: 6000 (6 seconds) Description: This parameter specifies the time-out value for Lmhosts and DNS name queries submitted by NetBT. The actual time-out could be as much as twice the value.
|
|
|
Записан
|
|
|
|
|