Блок NCB, который будет использован
#include <stdio.h> #include <stdlib.h> #include <dos.h> #include <conio.h> #include <mem.h> #include <string.h> #include "netbios.hpp"
// Класс серверов NETBIOS
class NETBIOS_DATAGRAM_SERVER {
unsigned errno; void interrupt ( *int5C)(...);
public:
// Здесь хранится имя сервера и номер этого имени
char OurName[16]; unsigned NetworkNameNumber;
// Конструктор, проверяет наличие NETBIOS и добавляет имя
NETBIOS_DATAGRAM_SERVER(char *Name) {
// Блок NCB, который будет использован при добавлении имени // NCB AddNameNCB;
// Проверяем длину имени
if(strlen(Name) > 15) { errno = 0xff; return; } strcpy(OurName, Name); // Проверяем наличие интерфейса NETBIOS
int5C = getvect(0x5c); errno = 0; if(FP_SEG(int5C) == 0x0000 FP_SEG(int5C) == 0xF000) { errno=0xff; exit(-1); }
// Добавляем имя
AddNameNCB.WAddName(OurName);
// Запоминаем полученный номер имени
NetworkNameNumber = AddNameNCB.GetNetworkNameNumber(); errno = AddNameNCB.Error(); }
// Деструктор, удаляет имя.
~NETBIOS_DATAGRAM_SERVER() { NCB AddNameNCB; AddNameNCB.WDeleteName(OurName); errno = AddNameNCB.Error(); }
// Функция для проверки кода ошибки
int Error(void) {return errno;}
// Функция для приема датаграммы
void Receive(char *ReceiveBuffer, unsigned BufferSize) { NCB ReceiveNCB;
// Записываем в NCB адрес и длину буфера
ReceiveNCB.SetBuffer(ReceiveBuffer, BufferSize);
// Выполняем прием датаграммы с ожиданием
ReceiveNCB.WReceiveDatagram(NetworkNameNumber);
} };
void main(void) {
// Наш сервер с именем "NETBIOS Server"
NETBIOS_DATAGRAM_SERVER Server("NETBIOS Server"); char ReceiveBuffer[512];
// Проверяем, были ли ошибки на этапе инициализации сервера.
if(Server.Error()) { printf("Ошибка %02.2X\n", Server.Error()); return; } printf("Инициализация завершена.\n"); printf("Ожидаем сообщение от клиента.\n");
// Принимаем сообщение от клиента
Server.Receive(ReceiveBuffer, 512); printf("Принято: >%s<\n",ReceiveBuffer);
Содержание Назад Вперед