![]() |
|
Модераторы: feodorv |
![]()
|
|
| Johen |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 58 Регистрация: 25.5.2004 Где: Санкт-Петербург Репутация: нет Всего: нет |
Нужна помощь.
Было заказано сделать тестер соединения по сети типа LAN. От проги требуется реализовать 4-х ступенчатую проверку соединения между двумя компами. Соответственно, один из них - сервер, другой - клиент. Должно быть произведено 4 теста: 1. Файл-файл 2. Файл-буфер 3. Буфер-файл 4. Буфер-буфер Каждый из тестов - в обе стороны, т.е. клиент->сервер и обратно. Для проведения тестов будут сгенерированны энное число тестовых файлов разного размера. Пример первого теста. Нужно выяснить скорость соединения клиент->сервер и обратно допустим при передаче 20 мегабайтового файла. Здесь все просто: фиксируем время начала теста, копируем с клиент-машины на сервер-машину в заранее расшаренный каталог этот файл, фиксируем время окончания теста, делим размер файла на прошедшее время и получаем искомый результат. Здесь появляется первая проблема. Все тесты с использованием файлов должны быть 3-х типов: передача по IP (\\192.168.0.1\check), по NetBIOS-имени (\\TESTSERV\check) и по dns (\\test.serv\check). Как получить, используя WinAPI, NetBIOS имя с WINS-сервера по IP? Да и еще. Тест файл-файл как и остальные тесты проводиться в обе стороны. Допустим, я сначала копирую файл с клиентской машины на машину-сервер, а потом заставляю сервак кинуть этот файл обратно на мою машину. Или еще проще: делаю в направлении клиент-сервер подряд три теста типа файл-файл, используя разные типы адресации, указанные выше. Используется один тестовый файл. Вот здесь встает одна, но очень большая проблема - системное файловое кеширование. Как обойти ее? Вообще программа-тестер состоит из клиента и сервера. Сервер устанавливается в виде сервиса на тестируемую машину (например на файл-сервер). Перед началом тестов происходит соединение через сокеты клиента и сервера. Эта система (клиент-сервер) нужна для реализации тестов с использованием буферов. В этих типах тестов должны быть реализованы две передачи данных: блочная передача и поток. Блочная передача понятна: функция send(). А вот как реализуется поток? Я что-то слышал про HANDLE, вот только что это и с чем его едят (т.е. как прикрутить к сокетам)? P.S. И еще один маленький вопрос. Вроде в сокетах есть функция передачи файла... Что это за функция и как ей пользоваться? Это сообщение отредактировал(а) Johen - 11.5.2005, 12:52 |
|||
|
||||
| knave |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 320 Регистрация: 6.3.2003 Где: Санкт-Питербург ( Россия) Репутация: 1 Всего: 5 |
Я так понимаю работаь тестилка должна только в локалке? Ели да, то CreateFile откроет тебе файл по любому из возможных вариацим имен в локалке. Ну а там дело техники, можно читаь из одного писать в другой, либо использовать CopyFile.
1. Файл-файл - Можно просто CopyFile или руками, из одного читаеш в другой пишеш через CreateFile, ReadFile, WriteFile 2. Файл-буфер - чтение удаленного файла, CreateFile, ReadFile 3. Буфер-файл - запись удаленного файла CreateFile, WriteFile 4. Буфер-буфер - CreateNamedPipe на клиенте и сервере, затем на одном конце пишеш блок в канал, WriteFile, на другом читаеш из канала ReadFile и пишеш в память. Если же тебе надо все сделать через сокеты, руками, тогда файлы будут локальными (для клиента и сервера) и надобности в именах сетевых ресурсов нет. Законектился к сереву по IP (или получил его через gethostbyname() через имя, интернет или локалки одинаково). Ну и читай файл в буфер и пиши из буфера в сокет, на том конце из сокета читай в буфер а из него пиши в файл. По сути Буфер-буфер, это частный случай файл - файл. Насчет потока неясно, поток это вообще абстрактное понятие и описанный выше способ пердачи тоже можно считать потоком. Вообще никаких копироволок файлов в СОКЕТАХ нет и быть не может. CreateFile и все остальные API функции кторые могут передавать даные между компами в локалке используют сокеты. У XP есть сервис СЕРВЕР - елси его вырубить то с локалкой кроме как через сокеты работь не сможеш. Это он занимается пересылкой всех данных между компами при использовании RPC, каналов и функций кторые могут передавать данные на удаленный комп в локалке или интернете (через VPN например). Скеты при этом работаь будут, так как каждое приложение кторое использует сокеты само является сервером или колиентом. Это сообщение отредактировал(а) knave - 11.5.2005, 18:19 -------------------- С наилучшими пожеланиями !!! |
|||
|
||||
| Plamenk |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 258 Регистрация: 18.2.2003 Репутация: нет Всего: 3 |
Мне кажется, что от программы требуется просто тестировать разные способы передачи по IP - использовать Socket,
по NetBIOS - соответственно NetBIOS, а по dns (\\test.serv\check) - WinInet, т.е. HTTP. Хотя я могу ошибаться. |
|||
|
||||
| Johen |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 58 Регистрация: 25.5.2004 Где: Санкт-Петербург Репутация: нет Всего: нет |
2knave:
Это все так. Большая часть именно так и будет реализована. 2Plamenk: Ты не прав. От программы требуется тестировать способы передачи данных, которые использует система во время своих рутинных операций. Во всех возможных вариациях. Причина, из-за которой я должен проводить тесты по трем типам адресов - проверка скорости получения IP-адреса машины (удаленной) по сравнению с его явным указанием (\\192.168.0.1\check). Открытые вопросы: 1. Как обойти кеширование файлов системой? 2. Как получить NetBIOS имя машины по ее IP, используя WINS-сервер? |
|||
|
||||
| Johen |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 58 Регистрация: 25.5.2004 Где: Санкт-Петербург Репутация: нет Всего: нет |
А как насчет функции TransmitFile из Winsock2 ? |
|||
|
||||
| knave |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 320 Регистрация: 6.3.2003 Где: Санкт-Питербург ( Россия) Репутация: 1 Всего: 5 |
Да это неболее чем обертка для send и recv. Хотя можо и через нее посылать. имя по IP gethostbyaddr() IP по имени gethostbyname() gethostname() имя текущей машины. Это сообщение отредактировал(а) knave - 12.5.2005, 15:06 -------------------- С наилучшими пожеланиями !!! |
|||
|
||||
| Johen |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 58 Регистрация: 25.5.2004 Где: Санкт-Петербург Репутация: нет Всего: нет |
Но gethostbyaddr() возвращает dns-имя... Или я не прав?
|
|||
|
||||
| Plamenk |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 258 Регистрация: 18.2.2003 Репутация: нет Всего: 3 |
Получение NetBIOS имени см. здесь.
|
|||
|
||||
| Johen |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 58 Регистрация: 25.5.2004 Где: Санкт-Петербург Репутация: нет Всего: нет |
Данные статьи не подходят.
|
|||
|
||||
| Coocky |
|
|||
![]() GUI гуру ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2879 Регистрация: 16.2.2004 Где: Украина. Запорожь е Репутация: нет Всего: 62 |
Тебе тоьлко АПИ или МФС можно?
-------------------- Верю в смерть после жизни, в любовь после секса ,в крем после бритья |
|||
|
||||
| knave |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 320 Регистрация: 6.3.2003 Где: Санкт-Питербург ( Россия) Репутация: 1 Всего: 5 |
А я вообще непонимаю, зачем так цепляться к разным именам если в конечном итоге перед тем ка установитьсоеденение все имена преобразуются в IP. Полчил IP и тестируй себе скорость. Разве что для того что бы сравнить скорость получения имени от днс и нетбиоса???
Это сообщение отредактировал(а) knave - 16.5.2005, 13:46 -------------------- С наилучшими пожеланиями !!! |
|||
|
||||
| Johen |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 58 Регистрация: 25.5.2004 Где: Санкт-Петербург Репутация: нет Всего: нет |
Именно. Еще надо оттестировать скорость получения имен.
2Coocky: только АПИ. |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Сети | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |