C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 7 - О прошлом примере / NetBIOS / Сеть

Шаг 7 - О прошлом примере

В прошлом примере мы создавали и получали список имен NetBIOS. Вывод был простой, получить список имен можно только если программа сама зарегистрирует имя и используя это имя мы можем получить все остальные имена. Остался вопрос как долг существует NetBios имя. Вобщем-то до конца работы программы. Для проверки этого вывода необходимо создать две одинаковые программы, как в прошлом примере. Вы можете загрузить их из проекта и скомпилировать. Разница у этих программ в именах программ и NetBios именах.

Имя программы         		NetBios имя
 TestApp1		#define LOCALNAME   "MYNET1"
 TestApp2		#define LOCALNAME   "MYNET2"

Кроме того в файлы добавленна ссылка на библиотеку conio.h:

#include "conio.h"

И реализована задержка завершения программы до нажатия на клавишу.

	........
	cout << pStatus->name_count << endl;
	cout << "Canсel" << endl;
	getch();
}

Запустите и завершите программу по очереди. Вы увидите только одно NetBios имя. А вот теперь запустите TestApp1 и не завершая выполнения TestApp2. У Вас должна быть примерно такая картина:

gif/7_1.gif (6270 b)

Как видите имя живет и здравствует всем врагам назло до завершения программы.

Еще на что хочу обратить Ваше вимание это на то, как мы с Вами формировали это имя. Первое - мы завели константу.

#define LOCALNAME   "MYNET2"

Вычислили её длину:

i_strlen = strlen(LOCALNAME);

Проверили длину на соответствие константе длины NCBNAMSZ и, если длина больше, то уменьшили до константы длины.

if (i_strlen > NCBNAMSZ)
	i_strlen = NCBNAMSZ;

Эта константа описана в файле NB30.H:

#define NCBNAMSZ 16 /* absolute length of a net name */

При заполении NCB имя помещается в ncb_name. Сначала заполняем буфер пробелами на положенную длину memset, потом копируем туда имя memcpy.

memset (ncb1.ncb_name, ' ', NCBNAMSZ);
memcpy (ncb1.ncb_name, LOCALNAME, i_strlen);

И вуаля - имя готово. Надо бы сделать из этого процесса нормальную процедуру типа GenerateNetBiosName().


Загрузить проект | | |
Автор Каев Артем.
[AD]