Cieľom projektu je vytvoriť klienta ku vzdialenej kalkulačke, ktorý bude komunikovať pomocou protokolu IPK Calculator Protocol. Program je napísaný v objekoto orientovanom jazyku C#.
Z hľadiska štruktúry je projekt rozdelený do troch tried a to Program
, Udp
a Tcp
. Program
je základná trieda, ktorá obsahuje metódu Main()
, ktorá je vstupným bodom programu. Triedy Udp
a Tcp
poskytujú metódy pre komunikáciu pomocou UDP/TCP protokolu.
classDiagram
class Program
Program : + Main()
class Udp
Udp : + Host
Udp : + Port
Udp : + Communicate()
class Tcp
Tcp : + Host
Tcp : + Port
Tcp : + Communicate()
Program ..> Udp : <<<a>create>>
Program ..> Tcp : <<<a>create>>
V nasledujúcej časti stručne zhrniem teóriu nutnú k pochopeniu implementovanej funkcionality. Zameriam sa hlavne na dva protokoly transportnej vrstvy a to UDP a TCP. Vychádzať budem zo zdrojov [1] a [2].
Protokol UDP, definovaný v [RFC 768], poskytuje nespojovú transportnú službu. Prenos dát pomocou takéhoto spojenia je nespoľahlivý a nič negarantuje. Postup pri komunikácii pomocou tohto protokolu zo strany klienta pozostáva z nasledujúcich fáz:
- Vytvorenie socketu
- Odoslanie dát na server
- Čakanie na odpoveď
- Ukončenie komunikácie
Protokol TCP je spojovo orientovaná transportná služba. Pred začatím komunikácie musí prebehnúť medzi serverom a klientom tzv. "handshake" - to znamená, že si musia navzájom poslať úvodné správy, ktoré nastavia parametre komunikácie. Protokol TCP je spoľahlivý a pri neúspechu doručenia správy, opakovane posiela dáta znovu. Pri TCP je postup pri komunikácii na strane klienta nasledovný:
- Vytvorenie socketu
- Ustanovenie spojenia
- Odoslanie dát na server
- Čakanie na odpoveď
- Ukončenie komunikácie
Testovanie bolo uskutočnené automatizovanými skriptami test_cli.py
, test_udp.py
a test_tcp.py
. Aplikácia bola testovaná v poskytnutom virtuálnom stroji s operačným systémom Linux (distribúcia NixOS 22.11 Raccoon). Počas testovania aplikácia komunikovala s refernčným serverom, ktorý bol spustený nasledovným príkazom: ipkpd -h 127.0.0.1 -p 2023 -m (udp|tcp)
. Testy boli spúšťané na zariadení Dell Latitude 5491 (Intel Core i7, 8GB RAM DDR4, 256GB SSD). Testovaná aplikácia bola vo verzii 1.0.0.
test_cli.py
testuje správne spracovanie argumentov príkazového riadkutest_udp.py
testuje komunikáciu pomocou protokolu UDPtest_tcp.py
testuje komunikáciu pomocou protokolu TCP
Vystup z testovania:
[nix-shell:~/IPK-Projekt-1/src/bin/Debug/net6.0]$ python test_cli.py
Testing Command-line interface
Passed ./ipkcpc -h 127.0.0.1 -p 2023 -m udp -x
Passed ./ipkcpc -p 2023 -m tcp
Passed ./ipkcpc -h 127.0.0.1 -p 2023 -m sctp
Passed ./ipkcpc -h 127.0.0.1 -p eighty -m udp
Passed ./ipkcpc -h google.com -p 2023 -m tcp
Passed ./ipkcpc
Passed ./ipkcpc --help
[nix-shell:~/IPK-Projekt-1/src/bin/Debug/net6.0]$ python test_udp.py
Testing UDP
Passed (+ 1 2)
Passed (a b)
Passed (/ 0 -1) (- -50 60)
Passed (* 12 12) (/ 10 0) (- c d) (/ 23 11)
Passed Empty input
[nix-shell:~/IPK-Projekt-1/src/bin/Debug/net6.0]$ python test_tcp.py
Testing TCP
Passed HELLO SOLVE (+ 1 2) BYE
Passed HELLO SOLVE (- 0 -1) SOLVE (/ 42 2) BYE
Passed HELLO BYE
Passed Hi
Passed Empty input
[1] KUROSE James F. a Keith W. ROSS. Computer networking: a top-down approach. Eighth edition.; Global edition. Harlow: Pearson Education Limited, 2022, ISBN 978-1-292-40546-9.
[2] DOLEJŠKA Daniel a KOUTENSKÝ Michal Programování síťových aplikací. VUT FIT: NES@FIT, 2023