Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: скорость проверки наличия расшареной папки на другой машине  (Прочитано 29141 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« : 30-10-2008 05:41 » 

есть такой проблем: когда из программы лезешь проверять, есть ли некая папка на другом компе, а на том комп не расшарили папку, то идёт некий таймаут, в течение которого ВИСИМ . Как уменьшить этот таймаут ?
Записан

zubr
Гость
« Ответ #1 : 30-10-2008 07:44 » 

Алексей1153++, а как ты проверяешь расшаренность папки?
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #2 : 30-10-2008 07:54 » 

net view \\computer - соответственно должен быть какой-то API
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
sss
Специалист

ru
Offline Offline

« Ответ #3 : 30-10-2008 08:20 » 

Алексей1153++, может, не подключенный компьютер, а не только отсутствие шары?
Записан

while (8==8)
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline 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.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #6 : 30-10-2008 09:09 » 

о, спасибо ) Ща заценячу
Записан

sss
Специалист

ru
Offline Offline

« Ответ #7 : 30-10-2008 09:13 » 

Тот же результ будет. Если компьютер запущен - выполниться запрос к нему и он ответит сразу. А вот если компьютер не запущен, начнется поиск по DNS, WINS  или/и широковещанию NBT.
Записан

while (8==8)
zubr
Гость
« Ответ #8 : 30-10-2008 09:25 » 

sss, так я так понял, что Алексей1153++ FindFirstFile делает не зная расшаренная папка или нет. В случае если сеть есть, то проверка с помощью вышеуказанных функций будет быстрее. Ну а для проверки сети тоже есть функции.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #9 : 01-11-2008 18:05 » 

Алексей1153++, есть специализированные функции: NetShareEnum, WNetEnumResource.
код, блин, на работе остался, но, в общем, это тоже не то. Список расшареных я так и не добился, выдаёт максимум список компутеров (  Да ещё всё с той же знаменитой задержкой.
Вот нельзя ли тупо посмотреть, есть ли конкретная папка (без задержки)

\\xxx.xxx.xxx.xxx\sh_folder

?

пока решение такое: клиент не ищет папку, пока не может подключиться к программе-серверу. И , даже подключившись, сначала получает конкретный отказ от сервера (проверяется версия) , только потом начинает искать шару. Тогда вероятность тормозов уменьшается
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #10 : 01-11-2008 18:07 » 

как вариант есть - запустить процесс, который будет по просьбе клиента проверять обновку и сгружать через свой порт. Но тут есть свои минусы. Как и там, впрочем Улыбаюсь Дальше жисть покажет, благо что тренироваться есть на ком
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #11 : 04-12-2008 08:14 » 

блин, проблема всё же есть - на сервере лежит кучка картинок, которые можно смотреть с клиента в локалке. Если папке не расшарена, программа висит, пока пытается понять это ((( И никак иначе. Что, неужели никик совсем нельзя ускорить процесс проверки ?
Записан

sss
Специалист

ru
Offline Offline

« Ответ #12 : 04-12-2008 08:49 » 

Алексей1153++, папка не расшарена, а компьютер включен? Как задается имя шары? Попробуй IP заместо имен...
Записан

while (8==8)
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #13 : 04-12-2008 08:56 » 

sss, да, забыли,  юзеры, скажем, расшарить, или просто создать папку, которая нужна. А операторы сидят, тыкнулись в объект - хотят картинку, а им - висение в ответ )). Та же фигня, если комп с папкой оказался отключен от сети.

доступ итак по IP делаю

\\IP\folder\файл
Записан

sss
Специалист

ru
Offline Offline

« Ответ #14 : 04-12-2008 09:00 » 

Алексей1153++, какой тип узла клиента? Поверить -> ipconfig /all
Записан

while (8==8)
zubr
Гость
« Ответ #15 : 04-12-2008 09:03 » 

Алексей1153++, я тебе уже предлагал вариант: получаешь список расшаренных папок. Это делаешь однократно, предварительно проверив подключен ли удаленный комп. Не знаю, почему у тебя получается список компов, у меня функция NetShareEnum возвращает список расшаренных ресурсов, причем расширенный список, показывает даже скрытые ресурсы - корневые диски .
Записан
sss
Специалист

ru
Offline Offline

« Ответ #16 : 04-12-2008 09:14 » 

Мда... Если указывать FQDN (полное имя DNS), то работает мгновенно. Алексей1153++, у тебя домен c DNS серверами? Указывая FQDN, мы сообщаем Windows об отказе использования NetBIOS при разрешении имен ....
Записан

while (8==8)
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #17 : 04-12-2008 09:17 » 

zubr, не смог я почему то добиться списка папок... И однократно нет смысла - если доступа не было перед этим, список надо делать снова, а это опять висим, без тормозов никак не выходит у меня

Мда... Если указывать FQDN (полное имя DNS), то работает мгновенно. Алексей1153++, у тебя домен c DNS серверами? Указывая FQDN, мы сообщаем Windows об отказе использования NetBIOS при разрешении имен ....
много незнакомых слов ))) На пальцах расскажи?
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline 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
Специалист

ru
Offline 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
Специалист

ru
Offline Offline

« Ответ #20 : 04-12-2008 10:00 » 

Все таки луше сделать так:

1. С помощью ICMP проверить доступность.
2. Если узел доступен, попытаться подключиться.

Не знаю, у меня если узел доступен, то при попытке подключиться к несуществующей шаре мгновенно выдает ошибку...\

И еще совет. Попробуй в process explorer от Руссиновича или в отладчике поглядеть стэк потока и выяснить, в какой именно системной функции происходит задержка...
« Последнее редактирование: 04-12-2008 10:05 от sss » Записан

while (8==8)
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #21 : 04-12-2008 10:21 » 

sss,

Обмен пакетами с alex-comp [192.168.1.38] по 32 байт:

Превышен интервал ожидания для запроса.
Превышен интервал ожидания для запроса.
Превышен интервал ожидания для запроса.
Превышен интервал ожидания для запроса.

Улыбаюсь

Цитата
1. С помощью ICMP проверить доступность.
как энто делается ?

в отладчике затык происходит в CreateFile, унутрь уже не пускают
Записан

sss
Специалист

ru
Offline Offline

« Ответ #22 : 05-12-2008 02:51 » 

Алексей1153++, включены брандмауэры да? Тяжело будет при использовании ICMP... Если включен брандмауэр, то ping эхо не вернется. Однако, если цель в одной сети с источником, то проверить доступность цели можно по наличию динамической записи в таблице ARP, сразу после отправки ICMP.

Смотри MSDN
ICMP -> IcmpSendEcho2
ARP ->GetIpNetTable

Покажи код, предшествующий CreateFile...
Записан

while (8==8)
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline 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
Специалист

ru
Offline Offline

« Ответ #24 : 05-12-2008 06:42 » 

Надо почитать про работу редиректора... Ты файл открываешь или каталог?
Записан

while (8==8)
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #25 : 05-12-2008 07:59 » 

файл (но, думаю, с каталогом разницы не будет ) ) - я подправил пост, забыл там pchFileName инициализировать
Записан

sss
Специалист

ru
Offline Offline

« Ответ #26 : 05-12-2008 08:21 » 

Алексей1153++, в общем получается, что без изменения системных настроек никак не получиться управлять временем выполнения функции CreateFile.
Смотри
http://technet.microsoft.com/en-us/library/cc739819.aspx
http://technet.microsoft.com/en-us/library/cc775874.aspx
« Последнее редактирование: 05-12-2008 08:28 от sss » Записан

while (8==8)
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline 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.

Записан

Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines