Локальные сети персональных компьютеров Использование протоколов IPX, SPX, NETBIOS



         

Система "клиент-сервер" на базе датаграмм - часть 6


void WDeleteName(char *name);

// Функция для определения номера имени

unsigned GetNetworkNameNumber(void) { return(ncb.NetworkNameNumber); }

// Функция для установки адреса и размера буфера

void SetBuffer(char far *Buf, unsigned BufSize) { ncb.Buffer = Buf; ncb.Size = BufSize; }

// Установка в ncb имени вызываемого партнера

void SetCallName(char *name);

// Прием датаграмм с ожиданием

void WReceiveDatagram(int NetwrkNameNumber) {

// Заполняем поле номера своего имени

ncb.NetworkNameNumber = NetwrkNameNumber;

// Вызываем NETBIOS

ncb.Cmd = NB_WReceiveDatagram; NetBios(); }

// Передача датаграмм с ожиданием

void WSendDatagram(int NetwrkNameNumber) {

// Заполняем поле номера своего имени

ncb.NetworkNameNumber = NetwrkNameNumber; ncb.Cmd = NB_WSendDatagram;

// Вызываем NETBIOS

NetBios(); }

};

В файле nbfunc.cpp приведены определения некоторых функций из класса NCB (листинг 21):

// =================================================== // Листинг 21. Функции для NETBIOS // // Файл nbfunc.cpp // // (C) A. Frolov, 1993 // ===================================================

#include <stdio.h> #include <stdlib.h> #include <dos.h> #include <conio.h> #include <mem.h> #include <string.h> #include "netbios.hpp"

// Добавляем имя

void NCB::WAddName(char *name) { char buf[16];

// Проверяем длину имени

if(strlen(name) > 15) { errno = 0xff; return; } strcpy(buf, name);

// При необходимости дополняем имя пробелами

while (strlen(buf) < 15) strcat(buf, " ");

// Вызываем NETBIOS

ncb.Cmd = NB_WAddName; strcpy(ncb.OurName, buf); NetBios(); errno = ncb.FinalCCode; }

// Удаление имени

void NCB::WDeleteName(char *name) { char buf[16];

// Проверяем длину имени

if(strlen(name) > 15) { errno = 0xff; return; } strcpy(buf, name);

// При необходимости дополняем имя пробелами

while (strlen(buf) < 15) strcat(buf, " ");

strcpy(ncb.OurName, buf);

// Вызываем NETBIOS

ncb.Cmd = NB_WDeleteName; NetBios(); errno = ncb.FinalCCode; }

// Установка имени вызываемого партнера

void NCB::SetCallName(char *name) { char buf[16]; if(strlen(name) > 15) { errno = 0xff; return; } strcpy(buf, name); while (strlen(buf) < 15) strcat(buf, " "); strcpy(ncb.CallName, buf); }




Содержание  Назад  Вперед