Documente online.
Zona de administrare documente. Fisierele tale
Am uitat parola x Creaza cont nou
 HomeExploreaza
upload
Upload




Servicii de comunicatie prin mesaje in retele Novell

Informatica


Servicii de comunicatie prin mesaje în retele Novell

Serviciile de comunicaþie prin mesaje permit programelor de aplicaþie:



a) emitã mesaje de pâna la 55 de octeþi în vederea difuzarii lor la mai multe destinaþii

b) stabileasca unul sau mai multe canale de mesaje cu o anumitã staþie de lucru legatã la acelaºi file server. Un astfel de canal oferã posibilitatea transmiterii de mesaje de pâna la 126 de octeþi.

Difuzarea de mesaje ºi comunicaþia prin canale consumã timp calculator la server. Pentru a avea o adevaratã comunicaþie de la egal la egal între staþiile de lucru, programele de aplicaþii pot sã foloseascã funcþiile IPX sau SPX sau NetBIOS. Aceste funcþii nu folosesc timp UC server ºi deci oferã performanþe mai bune ºi o flexibilitate crescutã. Pentru serviciul de difuzare a mesajelor, fiecare conexiune a unui file server are asociatã un buffer de 55 de octeþi pentru serviciul de comunicaþie prin canale, serverul menþinând pentru fiecare cone 13513w2215n xiune o coadã de mesaje (capacitatea maxima a cozii este de 6 mesaje). În mod normal, odatã cu conexiunea se trimite un mesaj spre difuzare cãtre o altã conexiune, acesta este depus în bufferul de mesaje difuzate sau în coada de mesaje primite ale conexiunii destinatare de unde este preluat de supervizor (shell) ºi afiºat pe linia cea mai de jos, a 25-a linie a ecranului.

Fiecare conexiune are un mod de tratare a mesajelor (un nr numai între 0 ºi 3, care poate fi modificat prin program), care precizeazã dacã bufferul destinat mesajelor difuzate este deschis sau nu ºi dacã supervizorul are sau nu voie sã preia automat mesajele difuzate.

Funcþiile de comunicare prin mesaje sunt folosite de programele utilitare SEND, CASTON ºi CASTOFF, care se folosesc pentru a emite mesaje în vederea difuzarii, sã permitã sau sã interzicã recepþionarea mesajelor difuzate. Mesajele transmise cu ajutorul acestor funcþii pot fi înregistrate într-un fiºier jurnal special, accesibil administratorului reþelei.

Fiºiere antet necesare:

#include <nit.h>

#include <niterror.h>

BroadcastToConsole

Trimite un mesaj care va fi afiºat la consola serverului implicit. Mesajele afiºate la consolã ºterg mesajele precedente.

Parametri:

char  *message ºir de caractere conþinând mesajul de trimis. Lungimea maximã este de 60 de caractere inclusiv NULul terminãtor. Sunt permise numai caracterele imprimabile din setul ASCII.

Rezultat:

int SUCCESSFULL

MESSAGE_QUEUE_FULL

IO_FAILURE (lipsã spaþiu dinamic de lucru).

CheckPipeStatus

Determinã starea uneia sau a mai multor canale de mesaje.

Parametri:

WORD  *connectionList  tablou conþinând numerele de conexiune ale staþiilor la care este legat fiecare dintre canalele asupra cãrora sã face interogarea.

BYTE  *resultList  fiecare element din acest tablou va primi ca valoare un cod indicând starea canalului identificat de elementul corespunzator din connectionList. Sunt definite urmatoarele valori :

0x00 -- canal în stare de funcþionare

0xFE -- cealaltã conexiune nu a deschis canalul corespunzãtor

0xFF -- canalul nu a fost deschis sau numãrul conexiunii este eronat.

WORD  connectionCount numãrul de canale (elemente în tablourile precedente).

Rezultat:

int SUCCESSFUL

CloseMessagePipe

Închide unul sau mai multe canale de mesaje.

Parametri:

WORD  *connectionList  tablou conþinând numerele de conexiune ale staþiilor la care este legat fiecare dintre canalele care trebuie închise

BYTE  *resultList  fiecare element din acest tablou va primi ca valoare un cod indicând starea canalului identificat de elementul corespunzãtor din connectionList. Sunt definite urmãtoarele valori :

0x00 -- canalul a fost închis cu succes

0xFD -- eroare, cealaltã conexiune nu mai este validã

0xFF -- eroare, canalul nu era deschis.

WORD  connectionCount numãrul de canale (elemente în tablourile precedente).

Rezultat:

int SUCCESSFULL

MESSAGE_QUEUE_FULL



IO_FAILURE (lipsã spaþiu dinamic de lucru).

GetBroadcastMessage

Preia un mesaj transmis prin difuzare. Apelarea acestei funcþii are sens numai

dacã modul de tratare a mesajelor difuzate este 2 sau 3.

Parametri:

char  *messageBuffer  va recepþiona mesajul (cel mult 55 de caractere, inclusiv NUL-ul terminator). Dacã nici un mesaj nu este disponibil, atunci messageBuffer[0] va lua valoarea '\0' (lungimea minimã a unui mesaj este 1).

Rezultat:

int SUCCESSFULL

MESSAGE_QUEUE_FULL

IO_FAILURE (lipsã spaþiu dinamic de lucru).

GetBroadcastMode

Permite aflarea modului curent de tratare a mesajelor difuzate. Un mesaj din

partea serverului poate elimina din buffer un mesaj din partea unei staþii de lucru.

Rezultat:

BYTE  0 -- mesajele sunt admise atât din partea altor staþii de lucru cât ºi din partea serverului. Supervizorul staþiei preia automat ºi afiºeazã   fiecare mesaj.

1 -- mesajele sunt admise numai din partea serverului. Supervizorul staþiei preia automat ºi afiseazã fiecare mesaj.

2 -- mesajele sunt admise numai din partea serverului. Este sarcina utilizatorului sã preia mesajele.

3 -- sunt admise mesaje atât din partea serverului cât ºi a altei staþii de lucru. Este sarcina utilizatorului sã preia mesajele.

GetPersonalMessage

Preia un mesaj din coada de mesaje asociatã staþiei de lucru.

Parametri:

char  *messageBuffer  primeºte ca valoare un ºir de caractere reprezentând cel mai vechi mesaj din coadã (cel mult 127 de caractere, inclusiv NUL-ul).

WORD  *connectionNumber primeºte ca valoare numãrul conexiunii care a emis mesajul, sau 0 dacã nu existã nici un mesaj în coadã.

Rezultat:

int SUCCESSFUL

IO_FAILURE (lipsã spaþiu dinamic de lucru).

LogNetworkMessage

Depune un mesaj în fiºierul NET$LOG.MSG al serverului implicit. Intrarea în fiºier va avea urmãtorul format:

luna/zi/an ore:minute STN numãr_staþie: mesaj

Funcþia poate fi utilizatã de utilitare sau de programe de aplicaþie care au nevoie sã înregistreze informaþii, de exemplu cu scopul de a le folosi pentru contabilitate.

Parametri:

char  *message  ºir de caractere imprimabile conþinând mesajul de înregistrat (cel mult 80 de caractere, inclusiv NUL-ul).

Rezultat:

int SUCCESSFUL.

OpenMessagePipe

Creazã o jumatate de canal de comunicaþie între staþia de lucru ºi una sau mai multe conexiuni, cealaltã jumatate a canalului (canalelor) trebuie creatã de conexiunea (conexiunile) destinatarã cu ajutorul aceleiaºi funcþii.

Parametri:

WORD  *connectionList  un tablou conþinând numerele conexiunilor la care trebuie conectatã staþia de lucru. Pentru fiecare element din acest tablou se aflã un element corespunzator în tabloul resultList.

BYTE  *resultList  elementele acestui tablou primesc ca valoare un cod care indicã rezultatul încercãrii de a deschide o conexiune între staþii de lucru ºi conexiunea indicatã de elementul corespunzator din connectionList. Valorile acestui cod pot fi :



0x00 -- succes, conexiunea destinatarã crease deja jumatatea ei de canal,

0xFE -- canal incomplet, conexiunea destinatarã existã, dar nu a creat încã jumatatea ei de canal,

0xFF -- eºec, conexiunea destinatarã nu existã.

WORD connectionCount numãrul de intrãri în connectionList.

Rezultat:

int SUCCESSFUL

IO_FAILURE (lipsã spaþiu dinamic de lucru).

SendBroadcastMessage

Trimite un mesaj spre difuzare la un numãr de conexiuni de pe acelaºi server.

Parametri:

char  *message  mesaj de difuzat (cel mult 56 de caractere, inclusiv NUL).

WORD  *connectionList  tablou conþinând numerele conexiunilor cãtre care trebuie difuzat mesajul.

BYTE  *resultList  tablou ale cãrui elemente primesc ca valoare un cod indicând modul în care s-a desfãºurat difuzarea mesajului cãtre conexiunea corespunzatoare din connectionList. Valorile acestui cod pot fi :

0x00 -- succes, mesajul a fost depus în bufferul de mesaje difuzate al conexiunii destinatare

0xFC -- eºec, bufferul de mesaje difuzate al  conexiunii destinatare este deja plin

0xFD -- numãrul conexiunii destinatare este eronat

0xFF -- eºec, conexiunea destinatarã nu existã sau modul ei de tratare a mesajelor difuzate nu permite acceptarea mesajului.

WORD  connectionCount numãrul de intrãri în connectionList.

Rezultat:

int SUCCESSFUL

IO_FAILURE (lipsã spaþiu dinamic de lucru).

SendPersonalMessage

Trimite un mesaj cãtre una sau mai multe conexiuni cu care staþia de lucru a deschis canale de mesaje.

Parametri:

char  *message  mesaj de trimis (cel mult 127 de caractere, inclusiv NUL).

WORD  *connectionList  tablou conþinând numerele conexiunilor cãtre care trebuie trimis mesajul.

BYTE  *resultList  tablou ale cãrui elemente primesc ca valoare un cod indicând modul în care s-a desfãºurat trimiterea mesajului cãtre conexiunea corespunzãtoare din connectionList. Valorile acestui cod pot fi :

0x00 -- success, mesajul a fost depus în bufferul de mesaje difuzate al conexiunii destinatare

0xFC -- eºec, coada de mesaje a conexiunii destinatare este deja plinã

0xFE -- conexiunea destinatarã nu a deschis acest canal

0xFF -- eºec, conexiunea destinatarã nu existã sau staþia de lucru nu a deschis un canal de comunicaþie spre aceastã conexiune.

WORD  connectionCount numãrul de intrãri în connectionList.

Rezultat:

int SUCCESSFUL

IO_FAILURE (lipsã spaþiu dinamic de lucru).

SetBroadcastMode

Stabileste modul în care sunt tratate mesajele difuzate destinate acestei staþii de lucru.

Parametri:

BYTE  broadcastMode o valoare între 0 ºi 3 specificând modul de tratare a mesajelor difuzate. Modul implicit este zero. Pentru semnificaþia valorilor vezi funcþia GetBroadcastMode.

Servicii de sincronizare în reþele Novell



Serviciile de sincronizare oferã programelor de aplicaþie posibilitatea coordonãrii accesului la fiºierele din reþea ºi la alte resurse.

Semafoare

Sistemul Netware pune la dispozitia utilizatorilor posibilitatea de a defini ºi folosi semafoare. Acestea pot fi folosite pentru a implementa cele mai diferite protocoale de sincronizare. Fiecãrui semafor îi sunt asociate douã contoare : un contor de procese care au 'deschis' semaforul (care au acces la semafor), ºi un contor care este decrementat la fiecare apel WaitOnSemaphore ºi incrementat la SignalSemaphore (contorul tipic pentru semafoare).

Etapele lucrului cu un semafor:

1) deschiderea semaforului (Open)

2) exploatarea semaforului (Wait ºi Signal)

3) închiderea semaforului (Close).

int OpenSemaphore(char *semaphoreName, int initialValue, long *semaphoreHandle,

WORD *openCount)

semaphoreName - numele semaforului (max. 128 de caractere, inclusiv NUL)

initialValue  - valoarea iniþialã a semaforului. Acest parametru nu se ia în considerare decât dacã semaforul nu existã ºi este creat. Sunt permise valori între 0 ºi 127.

*semaphoreHandle primeºte ca valoare un descriptor de semafor, care va fi utilizat în celelalte funcþii

*openCount primeºte numãrul de procese care au 'deschis' acest semafor.

Rezultat:

0x00 SUCCESSFUL

0xFE INVALID_SEMAPHORE_NAME_LENGTH

0xFF INVALID_SEMAPHORE_INITIAL_VALUE

int ExamineSemaphore(long semaphoreHandle, int *semaphoreValue,

WORD *openCount)

Examineazã un semafor deschis. Depune în semaphoreValue, respectiv openCount,

valoarea contorului de semafor, respectiv numãrul de procese care au deschis semaforul.

Rezultat:  0x00 SUCCESSFUL

0xFF INVALID_SEMAPHORE_HANDLE

int WaitOnSemaphore(long semaphoreHandle, WORD timeoutLimit)

Încearcã sã decrementeze contorul asociat unui semafor. Dacã dupã decrementare acesta este mai mare sau egal cu zero, atunci procesul care a apelat Wait continuã. În caz contrar, procesul este depus într-o coada de aºteptare asociatã semaforului. Coada avanseazã la fiecare apel Signal pentru acelaºi semafor. Dacã procesul petrece în coadã mai mult de timeoutLimit unitãþi de 1/18 sec, atunci el este scos din coadã ºi funcþia întoarce un cod de eroare.

Rezultat:

0x00 SUCCESSFUL

0xFE TIMEOUT_FAILURE

0xFF INVALID_SEMAPHORE_HANDLE

int SignalSemaphore(long semaphoreHandle)

Încrementeaza contorul asociat semaforului. Dacã în coada de aºteptare se afla vreun proces, primul proces din coadã este deblocat.

Rezultat:

0x00 SUCCESSFUL

0x01 SEMAPHORE_OVERFLOW (contorul a depaºit 127)

0xFF INVALID_SEMAPHORE_HANDLE

int CloseSemaphore(long semaphoreHandle)

Închide un semafor. Pentru ca programul sã recâºtige accesul la acel semafor, trebuie sã apeleze iarãºi OpenSemaphore. Dacã acest proces era ultimul care folosea semaforul, atunci semaforul este distrus.

Rezultat:

0x00 SUCCESSFUL

0xFF INVALID_SEMAPHORE_HANDLE

Probleme

1. Imaginaþi aplicaþii în care sã folosiþi cât mai multe din apelurile relative la comunicaþia ºi sincronizarea distribuitã în reþele Novell

2. Studiaþi programele filecomm.cpp, ipxcomm.cpp, pipecomm.cpp ºi imaginaþi programe de aplicaþii (readers-writers, cei 5 filozofi, producãtor-consumator, etc)




Document Info


Accesari: 1437
Apreciat: hand-up

Comenteaza documentul:

Nu esti inregistrat
Trebuie sa fii utilizator inregistrat pentru a putea comenta


Creaza cont nou

A fost util?

Daca documentul a fost util si crezi ca merita
sa adaugi un link catre el la tine in site


in pagina web a site-ului tau.




eCoduri.com - coduri postale, contabile, CAEN sau bancare

Politica de confidentialitate | Termenii si conditii de utilizare




Copyright © Contact (SCRIGROUP Int. 2025 )