Exemplu protocol de comunicare intre client si server

Inapoi la Laboratorul 1

Enuntul problemei:
Sa se scrie o pereche de programe client/server care comunica prin socketuri TCP. Clientul va trimite serverului o fraza, iar serverul ii raspunde cu numarul de caractere spatiu din sirul primit.
Protocolul:

  1. Clientul trimite serverului sirul de caractere continut de acesta impreuna cu caracterul NULL (0, ‘\0’) ce marcheaza sfarsitul sirului. Important!!! In lipsa unui delimitator la sfarsitul sirului, serverul nu are de unde sa stie unde se termina sirul trimis de client.
  2. La primirea caracterului NULL serverul considera sirul trimis de client terminat.
  3. Daca serverul nu primeste caracterul NULL timp de 10 de secunde (sau exista o pauza de maxim 10 de secunde de la caracterul trimis anterior de client) serverul inchide conexiunea clientului incercand sa ii trimita acestuia (este posibil ca clientul sa se fi blocat sau sa fi pierdut conexiunea cu clientul) in prealabil intregul -1 ca si cod de eroare. Protocolul specifica faptul ca serverul trebuie sa implementeze un astfel de mecanism de time-out, insa nu protocolul nu trebuie sa specifice modul in care trebuie implementat acest mecanism.
  4. Serverul poate contoriza caracterele spatiu la primirea fiecarui caracter sau la primirea intregului sir. Din punct de vedere al protocolului acest lucru nu e important
  5. Serverul returneaza un intreg N (cu semn) in format binar, reprezentat pe 4 octeti cu urmatoarea semnificatie:
    • N >= 0 : reprezinta de spatii din sirul primit;
    • N = -1 : eroare la primirea sirului de caractere de la client, clientul nu respecta protocolul;
    • N = -2 : daca numarul de caractere spatiu contorizate de catre server nu se poate reprezenta pe 4 octeti cu semn (e mai mare ca 231 – 1 (pe patru octeti – 32 de biti – cu semn pot reprezenta numere intregi in intervalul -231 .. +231-1).

Implementare a protocolului si rezolvarea problemei:

client.c

server.c

Inapoi la Laboratorul 1