Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/mateusz-stelmasiak/tcp-calculator-client-server
A basic client-server calculator written in C++. The apps communicate over TCP and implement a protocol assigned by the teacher.
https://github.com/mateusz-stelmasiak/tcp-calculator-client-server
Last synced: about 1 month ago
JSON representation
A basic client-server calculator written in C++. The apps communicate over TCP and implement a protocol assigned by the teacher.
- Host: GitHub
- URL: https://github.com/mateusz-stelmasiak/tcp-calculator-client-server
- Owner: mateusz-stelmasiak
- Created: 2019-10-25T20:46:32.000Z (about 5 years ago)
- Default Branch: master
- Last Pushed: 2023-09-07T17:43:14.000Z (over 1 year ago)
- Last Synced: 2024-04-16T05:00:03.658Z (8 months ago)
- Language: C++
- Homepage:
- Size: 184 MB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# TCP-calculator-client-server
A basic client-server calculator written in C++. The apps communicate over TCP and implement a protocol assigned by the teacher. Made with [@madragonse](https://github.com/madragonse) as a final project for TS (Technologie Sieciowe).## Funkcjonalność aplikacji
- nawiązanie połączenia,
- uzgodnienie identyfikatora sesji,
- wykonywanie operacji matematycznych na dwóch argumentach,
- wykonywanie operacji matematycznych na wielu argumentach:
- klient przesyła wartości liczbowe oraz operator,
- serwer zwraca wynik końcowy;
- zakończenie połączenia.
- gdy wartość wyniku wykracza poza zakres zmiennej, powinien zostać zwrócony błąd,
- identyfikator sesji oraz znacznik czasu powinny być przesyłane w każdym komunikacie.## Opis protokołu
Komunikacja między serwerem a klientem została zrealizowana przy użyciu protokołu tekstowego składającego się z pól o ogólnej strukturze {Klucz: wartość;}. Poniżej przedstawiono budowę pakietu, i wypisano wszystkie wykorzystywane klucze i ich możliwe wartości.### NAGŁÓWEK
**Operacja: …;**
- dodaj
- odejmij
- mnozenie
- dzielenie
- logarytm
- pierwiastek
- potega
- modulo
**Status: …;**
- NULL- dla zapytania wysłanego przez klienta.
- OK- dla odpowiedzi serwera zawierającej poprawny wynik działania.
- {string z opisem błędu}- dla błędu działania/pakietu (wypisane w sekcji obsługiwane błędy).
**Indeks: …;**
- <1-100> - stała dla danego połączenia serwer-klient.
- 0 - dla pierwszego pakietu w sesji wysłanego przez klienta.**ZnacznikCzasu: …;**\
Aktualna dla wysłania pakietu data i godzina. Format: hh:mm:ss/dd.mm.rrrr.### DANE
**Liczba1: …; Liczba2: …; Liczba3: …; [… ] LiczbaN: …;**\
Argumenty liczbowe potrzebne do obliczeń z zakresu < 0, 2^32)\
W pakiecie zwrotnym od serwera jeśli to pole występuje to jest to Liczba1, która
przechowuje wynik działania.**Koniec: TAK;**\
Wskazuje na zakończenie ciągu przesyłanych argumentów.### Obsługiwane błędy
Wysyłane w polu status.
- Błędy pakietu
- Blad_struktury_paczki
- Brak_identyfikatora
- Brak_operacji
- Brak_statusu
- Brak_znacznika_czasu
- Niepoprawny_identyfikator
- Liczby_poza_zakresem
- Niepoprawne_argumenty
- Błędy operacji
- Przepelnienie - dla wyników większych lub równych 2^32
- Wynik_mniejszy_od_zera
- Dzielenie_przez_zero
- Nieznana_operacja
- Za_duzo_argumentow
- Za_malo_argumentow
- Niepoprawny_logarytm
- Niepoprawny_pierwiastek
- Przepelnienie_wykladnika### Przykłady pakietów
[obsługa dodawania]
1. Pakiet do serwera ze zleceniem dodawania (1+1)\
Operacja: dodaj;Status: NULL;Identyfikator: 0;ZnacznikCzasu: 15:00:24/29.10.2019; Liczba1: 1;Liczba2: 1;Koniec: TAK;
2. Pakiet zwrotny od serwera z wynikiem dodawania (2)\
Operacja: dodaj;Status: OK;Identyfikator: 50;ZnacznikCzasu: 15:00:25/29.10.2019;Liczba1: 2;Koniec: TAK;[obsługa odejmowania]
1. Pakiet do serwera ze zleceniem odejmowania (1-3)\
Operacja: odejmij;Status: NULL;Identyfikator: 50;ZnacznikCzasu: 15:00:27/29.10.2019;Liczba1: 1;Liczba2: 3;Koniec: TAK;
2. Pakiet zwrotny od serwera z błędem odejmowania (Wynik_mniejszy_od_zera)\
Operacja: dodaj;Status:Wynik_mniejszy_od_zera;Identyfikator: 50;ZnacznikCzasu: 15:00:28/29.10.2019;Koniec: TAK;