Шаг 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().


Загрузить проект | Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 10.01.2000