Шаг 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

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