+ All Categories
Home > Documents > Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k...

Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k...

Date post: 14-Jun-2020
Category:
Upload: others
View: 7 times
Download: 0 times
Share this document with a friend
61
Jak naprogramovat internetovou komunikaci?
Transcript
Page 1: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší

Jak naprogramovat internetovou komunikaci?

Page 2: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší

PřipomenutíIP paket v. 4

Page 3: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší

TCP protokol

• transportní protokol – RFC 793• spojovaná spolehlivá služba

– zajišťuje číslování paketů a potvrzovánípříjmu mezi koncovými stanicemi

• na počátku komunikace je potřeba navázat spojení

– chová se jako plně duplexní virtuální kanál• řízení toku

Page 4: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší

TCP paketpseudohlavička

Page 5: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší

• číslování paketů– SEQ number, ACK number

• control bits:– URG – příznak urgentních dat– ACK- platnost hodnoty ACK number

– PSH – požadavek na bezprostř. předání– RST – žádost o okamžité ukončení spojení

– SYN – otevírání spojení– FIN – uzavření spojení v jednom směru

Page 6: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší

Navazování spojení

• 3 fázové potvrzovací schéma– three way handshake

• využívají se řídící bity pole CODE a čísla SEQ number a ACK number

• vytvoří se dva jednosměrné kanály (duplex)

Page 7: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší

1 2

SYN seqno=x

SYN seqno=x

SYN seqno=y, ACK ackno=x+1

SYN seqno=y, ACK ackno=x+1

ACK ackno=y+1ACK ackno=y+1

Page 8: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší

Uzavírání spojení

• každý jednosměrný kanál se uzavírásamostatně

Page 9: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší

1 2

FIN seqno=x

FIN seqno=x

ACK ackno=x+1

ACK ackno=x+1

ACK ackno=y+1

ACK ackno=y+1

FIN seqno=y, ackno=x+1

FIN seqno=y, ackno=x+1

Page 10: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší

Porty• přípojné místo aplikace

port port

proces proces

?

vyššívrstvatransportnívrstva

Page 11: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší

„Dobře známé porty“ (vyhrazené)

• některé porty mohou existovat trvale a jejich čísla (adresy) jsou vyhrazeny– tzv. dobře známé porty

(well-known ports)

• slouží např. k přijímánížádostí o konkrétníslužby– např. na portu 80 se

přijímají požadavky na WWW stránky

• jiné porty mohou vznikat dynamicky– a dostávat dynamicky

přidělovaná čísla od OS

• takovéto porty jsou zřizovány pro potřeby již navázaných komunikací– např. pro vlastní přenos

souborů, přičemž žádost je směrována na vyhrazený port

Page 12: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší

1/tcp tcpmux TCP Port Service Multiplexer2/tcp compressnet Management Utility 3/tcp compressnet Compression Process5/tcp rje Remote Job Entry7/tcp echo Echo9/tcp discard Discard11/tcp systat Active Users13/tcp daytime Daytime (RFC 867) 17/tcp qotd Quote of the Day18/tcp msp Message Send Protocol19/tcp chargen Character Generator20/tcp ftp-data File Transfer [Default Data] 21/tcp ftp File Transfer [Control] 22/tcp ssh SSH Remote Login Protocol23/tcp telnet Telnet24/tcp any private mail system any private mail system25/tcp smtp Simple Mail Transfer 27/tcp nsw-fe NSW User System FE 29/tcp msg-icp MSG ICP 31/tcp msg-auth MSG Authentication33/tcp dsp Display Support Protocol35/tcp any private printer server any private printer server 37/tcp time Time38/tcp rap Route Access Protocol39/tcp rlp Resource Location Protocol41/tcp graphics Graphics42/tcp nameserver Host Name Server 43/tcp nicname Who Is44/tcp mpm-flags MPM FLAGS Protocol45/tcp mpm Message Processing Module [recv] 46/tcp mpm-snd MPM [default send] 47/tcp ni-ftp NI FTP 48/tcp auditd Digital Audit Daemon49/tcp tacacs Login Host Protocol (TACACS) 50/tcp re-mail-ck Remote Mail Checking Protocol51/tcp la-maint IMP Logical Address Maintenance52/tcp xns-time XNS Time Protocol53/tcp domain Domain Name Server 54/tcp xns-ch XNS Clearinghouse55/tcp isi-gl ISI Graphics Language56/tcp xns-auth XNS Authentication57/tcp any private terminal access any private terminal access58/tcp xns-mail XNS Mail 59/tcp any private file service any private file service

60/tcp Unassigned Unassigned61/tcp ni-mail NI MAIL 62/tcp acas ACA Services63/tcp whois++ whois++ 64/tcp covia Communications Integrator (CI) 65/tcp tacacs-ds TACACS-Database Service66/tcp sql*net Oracle SQL*NET 67/tcp bootps Bootstrap Protocol Server 68/tcp bootpc Bootstrap Protocol Client69/tcp tftp Trivial File Transfer 70/tcp gopher Gopher71/tcp netrjs-1 Remote Job Service72/tcp netrjs-2 Remote Job Service73/tcp netrjs-3 Remote Job Service74/tcp netrjs-4 Remote Job Service75/tcp any private dial out service any private dial out service76/tcp deos Distributed External Object Store77/tcp any private RJE service any private RJE service78/tcp vettcp vettcp79/tcp finger Finger80/tcp http-www World Wide Web HTTP 81/tcp hosts2-ns HOSTS2 Name Server 82/tcp xfer XFER Utility 83/tcp mit-ml-dev MIT ML Device 84/tcp ctf Common Trace Facility85/tcp mit-ml-dev MIT ML Device 86/tcp mfcobol Micro Focus Cobol 87/tcp any private terminal link any private terminal link88/tcp kerberos Kerberos89/tcp su-mit-tg SU/MIT Telnet Gateway90/tcp dnsix DNSIX Securit Attribute Token Map 91/tcp mit-dov MIT Dover Spooler92/tcp npp Network Printing Protocol93/tcp dcp Device Control Protocol94/tcp objcall Tivoli Object Dispatcher95/tcp supdup SUPDUP96/tcp dixie DIXIE Protocol Specification97/tcp swift-rvf Swift Remote Virtural File Protocol98/tcp tacnews TAC News99/tcp metagram Metagram Relay101/tcp hostname NIC Host Name Server 102/tcp iso-tsap ISO-TSAP Class 0 103/tcp gppitnp Genesis Point-to-Point Trans Net104/tcp acr-nema ACR-NEMA Digital Imag. & Comm. 300

Page 13: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší

UDP protokol

• nadstavba protokolu IP – RFC 768• nepotvrzovaná datagramová služba

– rozšiřuje IP protokol o porty

Page 14: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší

UDP paket

Page 15: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší

ICMP• Internet Control Message Protocol• služební (řídicí) protokol internetu• musí jej implementovat každé zařízení• zprávy ICMP jsou „zabaleny“ do IP paketu• příklady zpráv (pole Type):

• 0 Echo reply (odpověď na požadavek, při PINGu)• 3 Destination unreachable (dále se větví dle pole

CODE)• 5 Redirect• 6 Alternate host address• 8 Echo Request• 11 Time Exceeded (TTL k 0)

Page 16: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší

ICMP paket

Page 17: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší

Co nám nabízejí některéprogramátorské nástroje?

• „nižší úroveň programování“– programování pomocí tzv. „socketů“

• UNIX, Linux, Windows, Python, JAVA

• „vyšší úroveň“– zapouzdření služeb (socketů) do tříd v rámci

objektově orientovaného programování• JAVA, .NET (Microsoft), Python• MFC – třída CSocket• Code Gear: TBaseSocket, TCPClient, ...

Page 18: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší

Rozhraní socketů

Je sice nejstarší, na nízké úrovni, ale stále se používá …

Page 19: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší

Rozhraní socket

BSD (Berkley Socket Distribution)• jde o standardní softwarové rozhraní pro

zasílání dat pomocí rodiny IP protokolů• vymyšleno a poprvé implementováno na

univerzitě v Berkley do OS UNIX• umožňuje programátorům používat

TCP/IP, resp. UDP, obdobným způsobem, jako se pracuje se soubory

Page 20: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší

• poprvé implementováno v jazyce C• implementace do operačních systémů

– UNIX (Linux) - knihovna socket.h – MS Windows – knihovna winsock.h

• programátorské funkce jsou navrženy tak, aby bylo snadné naprogramovat aplikaci klient -server

Charakteristika

Page 21: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší

Princip práce se soubory v jazyce C

• nejprve se soubor „otevře“; informace o otevřeném souboru se uloží do specálnídatové struktury OS (file descriptor)– zde proměnná f (ukazatel na typ FILE*)

f = fopen( ″text.doc ″, ″rb ″)

jméno souboru mód otev ření

r – čtení, w – zápis

b – binární mód

Page 22: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší

• ze souboru čteme data pomocí funkce fread (…) , zapisujeme data pomocí funkce fwrite (…)– zde v ukázce např. do pole data přečteme 10 bloků

po 1 bytu ze souboru f, který jsme předtím otevřeli

fread(data,1,10,f)

• po skončení práce „uzavřeme“ soubor voláním funkce fclose (…)

fclose(f)

Page 23: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší

• návrháři přenesli tento jednoduchý princip do programování komunikace sítí

Je to ale přece o trochu složitější …

• programujeme aplikaci klient/server– server čeká na příchod požadavku klienta

• TCP je orientované na spojení– funkce navazující spojení

• musíme znát mnoho údajů– IP adresu vlastní a partnera, port

Page 24: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší

Co je to socket?

• učeně– koncový komunikační uzel (endpoint)

• méně učeně– datová struktura (data), nesoucí informaci o

stavu síťového spojení; • musíme jej vytvořit voláním speciální funkce

podobně jako fopen pro otevření souboru

– komunikujeme pomocí funkcí write() a read(), jejichž parametr je otevřený socket (kam se posílají data)

Page 25: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší

Základní funkce rozhraní

• socket ()– vytvoří strukturu socket– používá jej klient i server– argumentem je rodina a typ protokolu

(TCP,UDP), typ služby (spojovaná/nespojovaná)

– vrací „nový“ socket• closesocket ()

– dealokuje (zavírá) socket

Page 26: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší

Funkce používané serverem• bind ()

– připojí do socketu identifikaci lokálního uzlu, tj. „moji“IP adresu a port

• listen() – spojovaná služba– „pasivuje“ socket, vytvoří frontu pro požadavky na

spojení (přes rezervovaný port)

• accept () - spojovaná služba– přijde-li požadavek, accept vytvoří nový socket,

pomocí něhož server komunikuje s klientem; původnísocket je nadále v pasivním stavu a očekává příchod nového požadavku (na rezervovaném portu)

Page 27: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší

Funkce používané klientem • connect () - spojovaná služba

– vytvoří spojení ke vzdálenému serveru• v případě TCP – 3-fázový potvrzovací protokol

– parametrem je adresa a port vzdáleného serveru

– po vytvoření spojení lze zahájit výměnu dat se serverem

Page 28: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší

Funkce přenosu dat • read () , write () - spojovaná služba

• recv (), recvfrom () , recvmsg

• send (), sendto (), sendmsg ()

– čtení a zápis dat „do socketu– recvfrom zaznamená i příjemce

Page 29: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší

Spojované služby

close

read

write

connect

socket

Klient

close

write

read

bind

socket

Server

listen

accept

Page 30: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší

Nespojované služby

close

read

write

connect

socket

Klient

close

sendtosendmsg

bind

socket

Server

recvfromrecvmsg

Page 31: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší

Konkurentní TCP server

Server(proces)

Operační systém

Aplikace

rezervovaný port

Vlákno(syn)

individuální socketya porty

Vlákno(syn)

Page 32: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší

Ukázky, jak se to programuje …

s=socket(PF_INET,SOCK_STREAM, IPPROTO_TCP)

rodina protokol ů

spojovanáslužba

protokol TCP

1. Vytvoření socketu

Page 33: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší

Ukázky, jak se to programuje …

addr.sin_family = AF_INET;

addr.sin_port = hston(3434);addr.sin_addr.S_un.S_addr = INADDR_ANY;

bind(s,(sockaddr*)&addr,sizeof(addr))

port, kde poslouchám

moje adresa

(0.0.0.0)

2. Bind – server: vložení vlastní IP adresy a portu k socketu

• naplním datovou strukturu pro adresu a port

Page 34: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší

Ukázky, jak se to programuje …

li sten (s, SOMAXCON);

max. délka fronty

socket

3. listen – server: čeká na příchod požadavku

Page 35: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší

Ukázky, jak se to programuje …

//vytvo ření nov ého procesu sx =accept (s, adresa,d élka );read (sx ,data ,vel );write (sx ,data ,vel );

nový socket

4. accept – server: po příchodu požadavku vytvořínový socket a zpravidla vytvoří nový proces, který dále komunikuje

Page 36: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší

• algoritmičtěji (Linux)listen(s,SOMAXCON);

while (nen í_konec)

{

SOCKET sx = accept (s, addr ,& delka );

fork() //vytvo ření syn. procesu

{

read(s,data,vel );

write(s,data,vel );

}

}

Page 37: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší

• k dispozici je mnoho pomocných funkcí– pro získání informací o počítači:

• gethostbyname()• GetAddressByName - ve winsock2.h

– čtení a změna parametrů socketu• getsockopt(), setsockopt()

– převodní funkce• getservbyport() – zjistí informace o serveru, např.

voláme z řetězcem FTP, vrátí port 21

– přidělení náhodného čísla portu

Page 38: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší

Princip socketů je stále využíván i v nových programátorských prostředcích!

Page 39: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší

Programování pomocí OOP(objektově orientovaného programování)

Page 40: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší

JAVA• sockety, třídy pro práci s adresami

Microsoft• MFC

– objektové prostředí pro tvorbu aplikací ve Windows

• pro síťové poskytuje zapouzdřený socket jako CSocket

• .NET– definovány třídy na vyšší úrovni (TCPClient,

WebClient)

Page 41: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší

Code Gear C++ Builder

• TCP spojení– TBaseSocket

– TIpSocket– TServerWinSocket

– TClientWinSocket– aj.

Page 42: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší

Microsoft .NET

Page 43: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší

Prostředí .NET

• generace systému vývoje aplikací pro operační systémy Windows založeném na řízeném běhovém prostředí

• založeno na OOP – je realizováno pomocí velkého počtu

speciálních tříd

• podporuje více programovacích jazyků– C++, C#, J++, Visual Basic

Page 44: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší

TCP/UDP komunikace

Třídy• IPEndPoint

– práce s IP adresou a port

• TcpClient, TcpListener– spojovaná služba

• UdpClient– nespojovaná služba

Page 45: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší

IPEndPoint

• nese informaci o adrese a portu• atributy

– Address, AdressFamily, Port

• zajímavé metody– ToString

• převede adresu na řetězec

– Create• vytvoří objekt podle socketu

Page 46: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší

TCPClient

• zapouzdřuje kompletní TCP komunikaci pro stranu klienta

• zajímavé atributy– ReceiveBufferSize, ReceiveTimeout,

SendBufferSize

• zajímavé metody– Connect(IPEndpoint endpoint)

• spojí se se serverem na adrese dané parametrem endpoint

Page 47: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší

– NetworkStream GetStream()• vrátí objekt typu Stream, pomocí jehož metod

zasíláme/přijímáme data; zasílání dat se neprovádípřímo pomocí metod této třídy

– Close()• uzavření spojení

Page 48: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší

TCPListener

• zapouzdřuje kompletní TCP komunikaci pro stranu serveru

• zajímavé atributy– LocalEndpoint

• informace o „mé“ adrese a portu

• zajímavé metody– Start()

• začíná poslouchat na portu, ekvivalentní funkci listen()

Page 49: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší

– Socket AcceptSocket(),– TcpClient AcceptTcpClient()

• vrací nový socket nebo objekt typu klient, pomocíkterého se zajišťuje další komunikace

– NetworkStream GetStream()– bool Pending()

• dotaz, zda není ve frontě nevyřízený požadavek na spojení

Page 50: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší

Ukázka v C++//vytvorime instanci posluchace pro urcity//TCP portTCPListener *listener =

new TCPListener(IPAddress.Loopback, 2000);TcpClient *client = NULL;

//zacneme naslouchani na urcenem portulistener->Start();//pockame na pripojeni nejakeho klientaclient = listener->AcceptTcpClient();

Page 51: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší

// po pripojeni si vyzvedneme proud a

nacteme z nej dataNetworkStream *clientStream =

client->GetStream();StreamReader *reader =

new StreamReader(clientStream);String *content = reader->ReadToEnd();

}

Page 52: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší

UDPClient

• zapouzdřuje kompletní UDP komunikaci; využívají jej obě strany

• zajímavé metody– int Send(array <unsigned char >^

data, int velikost)• zašle druhému počítači UDP paket

– array <unsigned char >^ Receive ( IPEndPoint ^% remoteEP )

• čeká na příchod a přijme UDP paket• data vrátí v poli bytů• vedlejší efekt je adresa, odkud paket přišel

Page 53: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší

– void Connect (IPEndPoind ^ remoteEP )

• do vlastních datových struktur uloží adresu a port cíle (spojení se ale nerealizuje, je to UDP!)

Page 54: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší

Přístup k www

Třída• WebClient

– implementuje kompletní www klient s možností stahování dat, souborů

– umožňuje• download a upload ve formě souborů z/na server• download a upload dat (tj. do pole)• přistupovat k datům na serveru přímo jako k

souboru

Page 55: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší

WebClient

• zajímavé atributy– BaseAddress

• URI adresa serveru

• zajímavé metody– DownloadData, DownloadFile– UploadData,UploadFile

– OpenRead, OpenWrite• otevře stream ke vzdálenému souboru

Page 56: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší

Ukázka v C++

WebClient ^client = gcnew WebClient();Console::Write("Zadejte URI (napr. ) : ");//nacteme URIString ^uri = Console::ReadLine();Console::Write("Zadejte nazev stazenehosouboru (napr. C:/new.txt) :");//nacteme kam se ma soubor ulozitString ^fileName = Console::ReadLine();

Page 57: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší

try{

//stahneme souborclient->DownloadFile(uri, fileName);Console::WriteLine("Soubor byl stazen.");

}catch(WebException ex){

Console::WriteLine("Pri stahovani souboru

doslo k vyjimce ");

}

Page 58: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší

Poznámky

• pro třídy z .NET má Microsoft speciálníoznačení reference (^ místo &)

• třídy se dynamicky alokují pomocí gcnew– na hromadě se správou paměti pomocí CLR s

garbage collectorem

Page 59: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší

Další třídy pro práci v síti

• Uri– práce s řetězcem URI (porovnání, parsing)

• IPAddress• Dns

– GetHostEntry, Resolve

• WebRequest, WebResponse– podle URI umí posílat/přijímat protokoly

HTTP, HTTPS, FILE, FTP

Page 60: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší

Podpora v jiných jazycích

• podporu IP sítí mají i jiné jazyky, např. Python– sockety

– HTTP, FTP, SMTP

Page 61: Jak naprogramovat internetovou komunikaci?€¦ · • 8 Echo Request • 11 Time Exceeded (TTL k 0) ICMP paket. Co nám nabízejí některé programátorské nástroje? • „nižší

Úkol

Napište hru hádání čísel jako síťovou hru. Klient zašle serveru požadavek na počátek hry. Server vygeneruje náhodné číslo. Klient zasílá hádané číslo zadávané uživatelem, server odpovídá, zda je číslo větší, menšínebo rovno hádanému. Navrhněte vlastníkomunikační protokol. Umožněte předčasněukončit hru ze strany klienta.


Recommended