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 руб./мес


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




 9 - Создаем клиента / NetBIOS / Сеть

Шаг 9 - Создаем клиента

У меня только один LANA и связь клиент сервер я тестирую сейчас 
на одном компьютере.Потом протестирую в сети. Данный подход 
позволил мне всё упростить.

Сначала нам необходимо подготовить буфер в переменной NCB ncb_event. GlobalAlloc выделяет память. CreateEvent создает объект сообщения.

NCB	ncb;
HANDLE *events;		
events = (HANDLE *)GlobalAlloc(GMEM_FIXED, sizeof(HANDLE) lenum.length);
ClearStruct(&ncb);
events[0] = CreateEvent(NULL, TRUE, FALSE, NULL);
ncb.ncb_event = events;

В процедуры я добавил изменения смотрите проект.

Первым шагом необходимо проинициализировать LANA - это мы делали и знакомо

if (ResetNetBios(LANA_NUM)!=NRC_GOODRET)
	printf("Error Reset \n");
else
	printf("God Reset\n");

Добавить имя это тоже нам знакомо:

if (AddNetBiosName(LANA_NUM,CLIENT_NAME)!=NRC_GOODRET)
	printf("Error Add \n");
else
	printf("God Add Name\n");

А вот теперь функция Connect():

void Connect(PNCB pncb)
{
	int     dwRetCode;
	// в поле ncb_name имя клиента
	FillMemory(pncb->ncb_name, sizeof(pncb->ncb_name), ' ');
	CopyMemory(pncb->ncb_name, CLIENT_NAME, strlen(CLIENT_NAME));
	// в поле ncb_callname имя сервера
	FillMemory(pncb->ncb_callname, sizeof(pncb->ncb_callname), ' ');
	CopyMemory(pncb->ncb_callname, SERVER_NAME, strlen(SERVER_NAME));
	// команда вызова
	pncb->ncb_command = NCBCALL | ASYNCH;
	dwRetCode = Netbios(pncb);
	if (pncb->ncb_retcode != NRC_PENDING)
		printf("Error Connect\n");
	return;
}

И наконец ожидание ответа:

while (!done)
{
	conn = WaitForMultipleObjects(lenum.length, events, FALSE, INFINITE);
	if (ncb.ncb_retcode == NRC_GOODRET)
	{
	printf("CONNECTED! \n");
	done = TRUE;
	}
}

Для тестирования клиента необходим сервер(программа). Она то у меня работает (в следующем шаге создадим) и поэтому этот шаг протестирован. Сразу хочу предупредить, что если у Вас LANA больше чем 1 и он не равен 0, то могут быть ошибки. Смотрите определения моих макроподстановок:

#define CLIENT_NAME "myclient"
#define SERVER_NAME "myserver"
#define MAX_SESSION  50  
#define MAX_NAMES    50
#define LANA_NUM 000

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