background image

Sieci Komputerowe – Laboratorium (2013) 

Maksymalne dopuszczalne rozmiary pakietów danych w NetBIOS: 

- Komunikacja za pomocą sesji umożliwia przesłanie w pakiecie do 64kb danych 
- Komunikacja za pomocą datagramów umożliwia przesłanie w pakiecie do 512 bajtów danych 
 

Budowa struktury NCB: 

Pole struktury 

Typ danych 

Opis 

ncb_command (COMMAND) 

byte 

Określa  rodzaj  używanej  funkcji  (reset,  addname,  deletename,  itd.)  w 
postaci stałej (język C) lub liczby (Pascal) 

ncb_retcode (RETCODE

)

 

byte 

Zwraca  wynik  działania  określonej  funkcji.  Zwraca  0  w  przypadku 
poprawnego  wywołania,  w  razie  błędu  zwraca  pewną  wartość,  która 
określa konkretny typ błędu 

ncb_lsn (LSN) 

byte 

Określa  numer  lokalnej  sesji  przydzielonej  przez  NetBIOS  przy 
ustanowieniu sesji.  Wartość ta zwracana  jest  przez  CALL i LISTEN i musi 
być podana w funkcjach SEND i RECEIVE. Wartością tego pola mogą być 
liczby z przedziału 1-254 

ncb_num (NUM) 

byte 

Pole  określające  numer  węzła  NetBIOS.  Zwracane  jest  przez  funkcję 
ADDNAME i wykorzystywane jest we wszystkich funkcjach odbierających 
datagramy  (RECEIVE).  Wartością  tego  pola  mogą  być  liczby  z  przedziału 
1-254 

ncb_buffer (BUFADR) 

pointer 

Wskaźnik (adres) na wiadomość, która ma zostać wysłana lub odebrana 

ncb_length (BUFLEN) 

word 

Określa  długość  bufora  wiadomości  (w  bajtach).  W  funkcjach  odbioru 
(RECEIVE)  ustawia  się  to  pole  na  maksymalną  wartość  (z  reguły  nie 
wiemy  jak  długą  wiadomość    nadawca  chce  nam  dostarczyć),  a  po 
wykonaniu  funkcji  pole  to  określa  dokładny  rozmiar  odebranej 
wiadomości w bajtach 

ncb_callname (CALLNAME) 

array [1..16] of byte  Pole  określające  nazwę  węzła  komputera  z  którym  chcemy  się  połączyć 

(zwykle  jest  to  nazwa  nadawcy)  wykorzystywane  w  funkcjach  CALL, 
LISTEN oraz w datagramach (RECEIVE). W przypadku użycia funkcji CHAIN 
SEND  pierwsza  połowa  pola  określa  rozmiar  bufora  odbioru,  a  druga 
połowa jego adres. Wszystkie bajty muszą być wykorzystane. 

ncb_name (NAME) 

array [1..16] of byte  Określa  nazwę  węzła  NetBIOS  wykorzystywanego  np.  w  funkcji  ADD 

NAME, DELETE NAME lub innych funkcjach. 

ncb_rto (RTO) 

byte 

Określa  czas  na  odbiór  wiadomości  (Receive  Time-Out).  Jednostką  jest 
pół sekundy czyli np. ustawienie tego pola na 1 bajt powoduje określenie 
czasu  odbioru  na  0.5  sekundy.  Po  upłynięciu  czasu  funkcja  odbioru 
zwraca  odpowiedni  błąd.    W  ramach  trwania  sesji  wartość  ta  pozostaje 
stała. Pola te muszą być użyte w funkcjach CALL i LISTEN (jeśli nie chcemy 
ustawiać czasu na odbiór, ustawiamy te pola na wartość 0) 

ncb_sto (STO) 

byte 

Określa czas na wysłanie wiadomości (Send Time-Out). Jednostką jest pół 
sekundy  czyli  np.  ustawienie  tego  pola  na  1  bajt  powoduje  określenie 
czasu  wysłania  na  0.5  sekundy.  Po  upłynięciu  czasu  funkcja  wysyłająca 
zwraca odpowiedni błąd i sesja zostaje zerwana.  W ramach trwania sesji 
wartość  ta  pozostaje  stała.  Pola  te  muszą  być  użyte  w  funkcjach  CALL  i 
LISTEN (jeśli nie chcemy ustawiać czasu na  wysłanie, ustawiamy  te pola 
na wartość 0) 

ncb_post (POST) 

pointer 

Pole wykorzystywane jedynie w trybie asynchronicznym (no-wait mode). 
Przechowuje adres przerwania funkcji po jej poprawnym wykonaniu. 

ncb_lana_num (LANA_NUM) 

byte 

Pole określające numer karty sieciowej komputera. W zależności od ilości 
kart  sieciowych  danego  komputera  pole  to  przyjmuje  różne  wartości. 
Zwykle  pole  to  ma  wartość  0  (jedna  lokalna  karta  sieciowa).  Pole 
wykorzystywane  w  niemal  każdej  funkcji  (RESET,  ADDNAME, 
DELETENAME itd.)  

ncb_cmd_cplt (CMD_DONE) 

byte 

Pole  to  jest  ustawiane  w  momencie  wywołania  funkcji.  Wartość  FF 
określa,  że  dana  funkcja  się  nie  wykonała.  W  przypadku  wykonania 
funkcji  pole  to  przyjmuje  identyczną  wartość  jak  RET_CODE  czyli  0  jeśli 
pomyślnie lub nr błędu w pozostałych przypadkach. 

ncb_reserved (RES) 

array [1..14] of byte  Pole zarezerwowane. Nie powinno być używane. 

 
Wait mode
 – tryb synchroniczny (z odczekiwaniem) – tryb używany na laboratorium 
No-wait mode – tryb asynchroniczny (bez odczekiwania) 

background image

Sieci Komputerowe – Laboratorium (2013) 

DODAWANIE WĘZŁA – schemat ogólny (Lab2) 

1. Reset węzła Netbios (RESET). 
2. Pobranie łańcucha tekstowego od użytkownika (nazwa dla węzła). 
3. Dodanie nazwy jako unikatowej (ADDNAME). 
4. Wstrzymanie działania programu do momentu naciśnięcia dowolnego klawisza przez użytkownika (w tym momencie 
polecenie „nbtstat -n” wydane w wierszu poleceń powinno wyświetlić dodaną nazwę) 
5. Usunięcie dodanej nazwy (DELETENAME) 

 

BROADCAST (DATAGRAM) – schemat ogólny (Lab 2) 

1. Reset węzła Netbios (RESET) – nadawca i odbiorca. 
2. Pobranie łańcucha tekstowego od użytkownika (nazwa dla węzła) – nadawca i odbiorca. 
3. Dodanie nazwy jako unikatowej (ADDNAME) – nadawca i odbiorca. 
4. Pobranie łańcucha tekstowego od użytkownika (komunikat do wysłania) – nadawca. 
5. Wysłanie datagramu (SENDBROADCASTDATAGRAM) – nadawca, odbiór datagramu (RECEIVEBROADCASTDATAGRAM) – 
odbiorca. 
6. Wyświetlenie odebranego komunikatu – odbiorca. 
7. Usunięcie dodanej nazwy (DELETENAME) – nadawca i odbiorca. 

 

MULTICAST i UNICAST (DATAGRAM) – schemat ogólny (Lab 4) 

1. Reset węzła Netbios (RESET) – nadawca i odbiorca. 
2. Pobranie łańcucha tekstowego od użytkownika (nazwa dla węzła) – nadawca i odbiorca. 
3. Dodanie nazwy: 
a) jako unikatowej (ADDNAME) – nadawca i odbiorca - transmisja unicast. 
b) jako unikatowej (ADDNAME – nadawca) i jako grupowej (ADDGROUPNAME – odbiorca) – transmisja multicast
4. Pobranie łańcucha tekstowego od użytkownika (komunikat do wysłania) oraz nazwy odbiorcy (adresata wysyłki, patrz pkt.3) – 
nadawca. 
5. Wysłanie datagramu (SENDDATAGRAM) – nadawca, odbiór datagramu (RECEIVEDATAGRAM) – odbiorca. 
6. Wyświetlenie odebranego komunikatu – odbiorca. 
7. Usunięcie dodanej nazwy (DELETENAME) – nadawca i odbiorca. 

 

SESJA – schemat ogólny (Lab 5)

 

1.Dodanie unikalnych nazw nadawcy i odbiorcy do lokalnej tabeli nazw NetBIOSu - ADD NAME. 
2.Nawiązanie logicznego połączenia (sesji) - CALL (nadawca) i LISTEN (odbiorca). 
3.Transfer komunikatów/danych - SEND (nadawca) i RECEIVE (odbiorca). 
4.Zakończenie/rozwiązanie sesji - HANG UP (nadawca lub odbiorca). 
5.Usunięcie nazw nadawcy i odbiorcy z lokalnej tabeli nazw NetBIOSu - DELETE NAME. 

 

Opis poszczególnych funkcji NetBIOS: 

RESET COMMAND 

Przyjmuje 

Zwraca 

ncb_command := $32;  

ResetAdapter := ncb_retcode

ncb_lana_num := NCBLANANUM; 

CMD_Done := ncb_cmd_cplt; 

ncb_lsn := 1; (dot. tylko sesji, max. 32) 

 

ncb_num := NCBNUM; (liczba poleceń do obsługi w danym 
czasie – zwykle 1, max. 32)
 

 

Implementacja: 
 

 

Uwagi: 
Po  wywołaniu  tej  funkcji  wszystkie  dotychczas 
istniejące  nazwy  węzłów  oraz  sesje  NetBIOS 
zostaną zlikwidowane.  
 
Funkcja  ta  powinna  być  wywoływana  przed 
rozpoczęciem  nawiązywania  komunikacji  za 
pomocą pseudoprotokołu NetBIOS. 
 
Za  pomocą  tej  funkcji  możemy  ponadto  
skonfigurować  parametry  naszego  połączenia 
(liczba  wspieranych  sesji  1-32,  ilość  funkcji 
obsługiwanych w jednym czasie 1-32). 

background image

Sieci Komputerowe – Laboratorium (2013) 

ADD NAME COMMAND 

Przyjmuje 

Zwraca 

ncb_command := $30;  

NCBNUM := ncb_num; {numer węzła pomiędzy 1-254} 

ncb_lana_num := NCBLANANUM; 

AddName := ncb_retcode; 

move(nazwa, ncb_name, 16); {nazwa węzła max. 16 znaków} 

CMD_Done := ncb_cmd_cplt; 

ncb_post := $seg:$ofs (dot. tylko no-wait mode)

 

 

 
Implementacja: 

 

Uwagi: 
Funkcja  ta  służy  do  nadawania 
nazwy 

węzła 

protokole 

NetBIOS.  Nazwa  węzła  musi  być 
unikalna dla całej sieci. 

 

ADD GROUP NAME COMMAND 

Przyjmuje 

Zwraca 

ncb_command := $36;  

NCBNUM := ncb_num; {numer węzła pomiędzy 1-254} 

ncb_lana_num := NCBLANANUM; 

AddGroupName := ncb_retcode; 

move(nazwa, ncb_name, 16); {nazwa węzła max. 16 znaków} 

CMD_Done := ncb_cmd_cplt; 

ncb_post := $seg:$ofs (dot. tylko no-wait mode)

 

 

 

Implementacja: 

 

Uwagi: 
Funkcja ta służy do nadawania 
grupowej 

nazwy 

węzła 

NetBIOS  –  w  tym  przypadku 
nie jest to nazwa unikalna.  
 
Jeśli  w  sieci  istnieje  unikalna 
nazwa  węzła  używana  przez 
inny  proces  o  takiej  samej 
nazwie  jaką  chcemy  nadać,  to 
funkcja  zwraca  błąd  w  polu 
RETCODE.  
 
Funkcji  tej  używa  się  w 
transmisji  typu  BROADCAST. 
Wszystkie  komputery  w  sieci 
nasłuchujące 

spod 

nazwy 

grupowej 

otrzymają 

komunikat  wysłany  poprzez 
SEND DATAGRAM. 

 
 
 
 

background image

Sieci Komputerowe – Laboratorium (2013) 

DELETE NAME COMMAND 

Przyjmuje 

Zwraca 

ncb_command := $31;  

NCBNUM := ncb_num; {numer węzła pomiędzy 1-254} 

ncb_lana_num := NCBLANANUM; 

DeleteName := ncb_retcode; 

move(nazwa, ncb_name, 16); {nazwa węzła max. 16 znaków} 

CMD_Done := ncb_cmd_cplt; 

ncb_post := $seg:$ofs (dot. tylko no-wait mode)

 

 

 

Implementacja: 

 

Uwagi: 
Za  pomocą  tej  funkcji  usuwane  są 
nazwy  węzłów  z  lokalnej  tabeli 
NetBIOS.  Jeśli  pod  daną  nazwą 
istnieją  jakieś  aktywne  sesje,  to 
taka  nazwa  nie  zostanie  usunięta 
do momentu rozwiązania sesji. 
 
Każda 

poniższych 

funkcji 

związanych  z  funkcją  usuwania 
spowoduje  zwrócenie  błędu  nr  17 
(Name  was  deleted)  w  polu 
RETCODE funkcji DELETE NAME: 
- LISTEN 
- RECEIVE 
- RECEIVE ANY 
- RECEIVE DATAGRAM 

 

CALL COMMAND 

Przyjmuje 

Zwraca 

ncb_command := $10;  

NCBLSN := ncb_lsn; (Numer sesji pomiędzy 1, a 254) 

ncb_lana_num := NCBLANANUM; 

Call := ncb_retcode; 

move(odbiorca, ncb_callname, 16); 

 

(nazwa węzła odbiorcy)

CMD_Done := ncb_cmd_cplt; 

move(nazwa, ncb_name, 16); 

 

(nazwa węzła nadawcy)

 

ncb_rto := 0; {Receive Timeout} 
ncb_sto := 0; {Send Timeout} 

ncb_post := $seg:$ofs (dot. tylko no-wait mode)

 

 

Implementacja: 

 

Uwagi: 
Funkcja  ta  służy  do  nawiązania  sesji  z  innym 
komputerem w sieci lub z innym procesem.  
 
Pokrewna  funkcja  LISTEN  musi  przyjąć  tą  samą 
nazwę  w  polu  NCB_NAME,  aby  udało  się 
nawiązać połączenie sesyjne.  
 
Zwracany 

numer 

sesji 

(NCB_LSN) 

wykorzystywany  jest  podczas  wysyłania  i 
odbierania  danych  oraz  dla  funkcji  HANG  UP 
(rozwiązywanie sesji po numerze).  
 
Czasy  oczekiwania  programów:  nadawcy  na 
wysyłkę i odbiorcy na nadejście 
komunikatu  można  ustawić  na  bezlimitowe  za 
pomocą przypisania do pól NCB_RTO i NCB_STO 
wartości 0.  

background image

Sieci Komputerowe – Laboratorium (2013) 

LISTEN COMMAND 

Przyjmuje 

Zwraca 

ncb_command := $11;  

NCBLSN := ncb_lsn; (Numer sesji pomiędzy 1, a 254) 

ncb_lana_num := NCBLANANUM; 

Listen := ncb_retcode; 

move(odbiorca, ncb_callname, 16); 

 

(nazwa węzła odbiorcy)

CMD_Done := ncb_cmd_cplt; 

move(nazwa, ncb_name, 16); 

 

(nazwa węzła nadawcy)

move(ncb_callname, nadawca, 16); 

ncb_rto := 0; {Receive Timeout} 

 

ncb_sto := 0; {Send Timeout} 

ncb_post := $seg:$ofs (dot. tylko no-wait mode)

 

 

Implementacja: 

 

Uwagi: 
Funkcja  używana  do  nawiązywania  sesji  (po 
stronie  odbiorcy).  Sesja  zostanie  nawiązana  jeśli 
nadawca  w  funkcji  CALL  podał  tą  samą  nazwę 
węzła co odbiorca w funkcji LISTEN.  
 
Pod  jedną  nazwą  lub  jedną  parą  nazw  można 
zainicjować więcej niż jedną sesję. 
 
Jeśli  na  pierwszej  pozycji  pola  NCB_CALLNAME 
znajduje  się  symbol  „*”  (gwiazdka)  to  funkcja 
LISTEN  będzie  nasłuchiwać  ze  wszystkimi 
nadawcami w sieci, którzy wywołali funkcje CALL. 
 
Pierwszeństwo  w  nawiązywaniu  sesji  przez 
funkcje 

LISTEN 

ma 

ta, 

która 

polu 

NCB_CALLNAME 

zawiera 

konkretną 

nazwę 

nadawcy, a nie symbol gwiazdki „*”. 
 
Jeżeli użyto symbolu „*” w NCB_CALLNAME, to po 
wywołaniu  funkcji  LISTEN  w  tym  polu  będzie 
znajdować się nazwa węzła nadawcy. 

 

HANG UP COMMAND 

Przyjmuje 

Zwraca 

ncb_command := $12;  

HangUp := ncb_retcode; 

ncb_lana_num := NCBLANANUM; 

CMD_Done := ncb_cmd_cplt; 

ncb_lsn := 1; 

 

ncb_post := $seg:$ofs (dot. tylko no-wait mode)

 

 

Implementacja: 

 

Uwagi: 
Funkcja  ta  przerywa  lub  zamyka  sesję.  Może  być  użyta 
zarówno  po  funkcji  CALL  (u  nadawcy)  jak  i  LISTEN  (u 
odbiorcy).  
 
Jeśli  funkcja  ta  zostanie  wywołana  podczas  gdy  w  sesji 
„wisi” jeszcze: 
a) któraś z funkcji odbioru RECEIVE, to funkcje te zwrócą 
błąd 0A (Session closed).  
b) funkcja SEND, to HANG UP odczeka na jej wykonanie i 
dopiero zadziała. 
 
W przypadku wywołania funkcji HANG UP dla sesji, która 
nie  istnieje,  zostanie  zwrócony  błąd  08  (Invalid  session
lub 0A (Session closed). 

 
 

background image

Sieci Komputerowe – Laboratorium (2013) 

SEND COMMAND 

Przyjmuje 

Zwraca 

ncb_command := $14;  

Send := ncb_retcode; 

ncb_lana_num := NCBLANANUM; 

CMD_Done := ncb_cmd_cplt; 

ncb_lsn := 1; 

 

ncb_buffer:=@komunikat[1]; 
ncb_length:=length(komunikat); 

ncb_post := $seg:$ofs (dot. tylko no-wait mode)

 

 

Implementacja: 

 

Uwagi: 
Funkcja  ta  służy  do  wysyłania  danych  do  urządzeń  lub 
procesów w sieci w ramach nawiązanej sesji. 
 
W  sesji  musi  zostać  wywołana  funkcja  RECEIVE  lub 
RECEIVE ANY, aby dane zostały przesłane.  
 
Dane  wysyłane  są  z  opóźnieniem  zgodnym  z  polem 
NCB_STO w funkcji CALL. 
 
Jeśli  funkcja  SEND  zakończy  się  błędem,  sesja  zostaje 
przerwana. 

 

RECEIVE COMMAND 

Przyjmuje 

Zwraca 

ncb_command := $15;  

Receive := ncb_retcode; 

ncb_lana_num := NCBLANANUM; 

CMD_Done := ncb_cmd_cplt; 

ncb_lsn := 1; 

move(ncb_length, dlugosc, NCBNAMSZ); 

ncb_buffer:=@komunikat[1]; 

 

ncb_length:=250; 

ncb_post := $seg:$ofs (dot. tylko no-wait mode)

 

 

Implementacja: 

 

Uwagi: 
Funkcja  ta  służy  do  odbierania  danych  od  urządzeń  lub 
procesów w sieci w ramach nawiązanej sesji. 
 
Jeśli  upłynął  czas  ustawiony  w  polu  NCB_RTO  w  funkcji 
LISTEN  i  nie  wywołano  w  tym  czasie  funkcji  SEND,  to 
funkcja  RECEIVE  zwróci  błąd  o  numerze  05  (Timeout 
error
). 
 
Jeśli  maksymalny  rozmiar  bufora  odbioru  jest  mniejszy 
od  rozmiaru  przesyłanej  wiadomości,  to  odbiorca 
otrzyma  wiadomość  skróconą  do  ilości  miejsca  w 
buforze.  Pozostała  (ucięta)  część  wiadomości  nie 
przepada,  a  zostaje  dosłana  w  kolejnym  wywołaniu 
funkcji  RECEIVE.  Ponadto  w  polu  RETCODE  znajdzie  się 
błąd o numerze 06 (Przepełniony bufor). 
 
Po  wywołaniu  funkcji  w  polu  NCB_LENGTH  znajdzie  się 
długość  otrzymanej  wiadomości,  natomiast  przypisanie 
do  pomocniczej  zmiennej  zawartości  bufora  pozwoli 
nam na odczytanie odebranego komunikatu. 

 

background image

Sieci Komputerowe – Laboratorium (2013) 

SEND DATAGRAM COMMAND 

Przyjmuje 

Zwraca 

ncb_command := $20;  

SendDatagram := ncb_retcode; 

ncb_lana_num := NCBLANANUM; 

CMD_Done := ncb_cmd_cplt; 

ncb_num := NCBNUM;  

 

move(odbiorca, ncb_callname, NCBNAMSZ); 
ncb_buffer := @wiadomosc[1]; 
ncb_length := length(wiadomosc); 

ncb_post := $seg:$ofs (dot. tylko no-wait mode)

 

 

Implementacja: 

 

Uwagi: 
Funkcja ta służy do wysyłania datagramów.  
 
Datagram  pozwala  na  transfer  komunikatów 
pomiędzy  stacjami  lub  procesami  w  sieci,  bez 
konieczności  nawiązywania  sesji.  Transfer  odbywa 
się  na  podstawie  nazw  węzłów  NetBIOS 
unikalnych, bądź grupowych lub też do wszystkich 
stacji w sieci (w przypadku BROADCAST). 
 
Protokół  NetBIOS  nie  sprawdza,  czy  datagram 
został  wysłany  czy  nie,  przez  co  nadawca 
komunikatu  nie  dowie  się,  czy  wiadomość  dotarła 
do  odbiorcy/odbiorców,  czy  też  nie,  a  co  za  tym 
idzie sposób ten nie jest doskonały na tyle co sesja. 
 
Komunikacja  za  pomocą  datagramów  umożliwia 
przesłanie  w  pakiecie  do  512  bajtów  danych 
(ncb_length). 

 

RECEIVE DATAGRAM COMMAND 

Przyjmuje 

Zwraca 

ncb_command := $21;  

ReceiveDatagram := ncb_retcode; 

ncb_lana_num := NCBLANANUM; 

CMD_Done := ncb_cmd_cplt; 

ncb_buffer:=@s[1]; 

move(ncb_length, dlugosc, NCBNAMSZ); 

ncb_length:=250; 

move(ncb_callname, odb, NCBNAMSZ); 

ncb_num:=NCBNUM; 

 

ncb_post := $seg:$ofs (dot. tylko no-wait mode)

 

 

 

 

Uwagi: 
Funkcja  ta  służy  do  odbierania  datagramów.  Jej 
wywołanie  powinno  nastąpić  przed  wywołaniem 
funkcji  SENDDATAGRAM.  Funkcja  ta  nie  posiada 
żadnego timeout’u jak w przypadku sesji.  
 
Jeśli  maksymalny  rozmiar  bufora  odbioru  jest 
mniejszy  od  rozmiaru  przesyłanej  wiadomości,  to 
odbiorca  otrzyma  wiadomość  skróconą  do  ilości 
miejsca  w  buforze.  Pozostała  (ucięta)  część 
wiadomości przepada (kolejna wada datagramów w 
stosunku  do  sesji).  Ponadto  w  polu  RETCODE 
znajdzie się błąd o numerze 06 (Przepełniony bufor). 
 
Jeśli  pole  NCB_NUM  zostanie  wypełnione  wartością 
FF  to  funkcja  będzie  odbierać  wszystkie  datagramy 
wysłane w sieci.  
 
Funkcja  ta  zwraca  długość  komunikatu,  nazwę 
nadawcy, status wykonania i kod błędu. 
 

background image

Sieci Komputerowe – Laboratorium (2013) 

SEND BROADCAST COMMAND 

Przyjmuje 

Zwraca 

ncb_command := $22;  

SendBroadcastDatagram := ncb_retcode; 

ncb_lana_num := NCBLANANUM; 

CMD_Done := ncb_cmd_cplt; 

ncb_num := NCBNUM;  

 

move(odbiorca, ncb_callname, NCBNAMSZ); 
ncb_buffer := @wiadomosc[1]; 
ncb_length := length(wiadomosc); 

ncb_post := $seg:$ofs (dot. tylko no-wait mode)

 

 

Implementacja: 

 

 

Uwagi: 
Funkcja  ta  służy  do  wysyłania  wiadomości 
typu 

BROADCAST 

(do 

wszystkich 

nasłuchujących).  
 
Aby  wiadomość  dotarła  do  odbiorców  muszą 
oni wywołać funkcję RECEIVE BROADCAST.  
 

RECEIVE BROADCAST COMMAND 

Przyjmuje 

Zwraca 

ncb_command := $23;  

ReceiveBroadcastDatagram := ncb_retcode; 

ncb_lana_num := NCBLANANUM; 

CMD_Done := ncb_cmd_cplt; 

ncb_num := NCBNUM;  

move(ncb_length, dlugosc, NCBNAMSZ); 

ncb_buffer := @wiadomosc[1]; 

move(ncb_callname, odb, NCBNAMSZ); 

ncb_length := length(wiadomosc); 

 

ncb_post := $seg:$ofs (dot. tylko no-wait mode)

 

 

Implementacja: 

 

Uwagi: 
Funkcja 

ta 

służy 

do 

odbierania 

wiadomości 

typu 

BROADCAST. 

Jej 

wywołanie  powinno  nastąpić  przed 
wywołaniem  funkcji  SENDBROADCAST. 
Funkcja 

ta 

nie 

posiada 

żadnego 

timeout’u jak w przypadku sesji.  

 

Jeśli maksymalny rozmiar bufora odbioru 
jest  mniejszy  od  rozmiaru  przesyłanej 
wiadomości, 

to 

odbiorca 

otrzyma 

wiadomość  skróconą do ilości miejsca w 
buforze. 

Pozostała 

(ucięta) 

część 

wiadomości  przepada  (kolejna  wada 
datagramów  w  stosunku  do  sesji). 
Ponadto  w  polu  RETCODE  znajdzie  się 
błąd o numerze 06 (Przepełniony bufor). 

 

Funkcja  ta  zwraca  długość  komunikatu, 
nazwę  nadawcy,  status  wykonania  i  kod 
błędu.