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



         

Система "клиент-сервер" на базе каналов - часть 5


// Команды для приема данных по каналу

#define NB_WReceive 0x15 #define NB_Receive 0x95 #define NB_WReceiveAny 0x16 #define NB_ReceiveAny 0x96

// Прочие команды

#define NB_WResetAdapter 0x32 #define NB_WCancel 0x35 #define NB_WSessionStatus 0x34 #define NB_SessionStatus 0xb4

// Класс NCB для работы с командами NETBIOS

class NCB {

// Стандартный блок NCB в формате NETBIOS

struct _NCB { unsigned char Cmd; unsigned char CCode; unsigned char LocalSessionNumber; unsigned char NetworkNameNumber; void far *Buffer; unsigned Size; char CallName[16]; char OurName[16]; unsigned char ReceiveTimeout; unsigned char SendTimeout; void interrupt (*PostRoutine)(void); unsigned char AdapterNumber; unsigned char FinalCCode; unsigned char Reserved[14]; } ncb; struct SREGS sregs; union REGS regs; unsigned errno; // Функция для вызова NETBIOS

void NetBios(void) { sregs.es = FP_SEG(&ncb); regs.x.bx = FP_OFF(&ncb); int86x(0x5c, &regs, &regs, &sregs); }

public:

// Конструктор, расписывает ncb нулями

NCB() { memset(&ncb, 0, sizeof(ncb)); errno = 0; }

// Функция возвращает код ошибки

int Error(void) {return errno;}

// Функция для добавления имени

void WAddName(char *name);

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

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 SetRtoSto(int rto, int sto) { ncb.ReceiveTimeout = rto; ncb.SendTimeout = sto; }

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

void SetCallName(char *name);

// Установка в ncb имени нашей станции

void SetOurName(char *name);

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

void WReceiveDatagram(int NetwrkNameNumber) {

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

ncb.NetworkNameNumber = NetwrkNameNumber;

// Вызываем NETBIOS

ncb.Cmd = NB_WReceiveDatagram; NetBios(); }




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