Jak naprogramovat internetovou komunikaci?



Podobné dokumenty
Úvod Jednoduchá komunikace Sockety Konec. Programování v C# Síťová komunikace. Petr Vaněček 1 / 33

Jak naprogramovat internetovou komunikaci?

Programování v jazyku Java Java a Internet, základní pojmy, socketové x datagramové spojení, klient - server architektura.

Úvod Virtuální kanál TCP Datagramová služba UDP URL TCP, UDP, URL. Fakulta elektrotechnická

Komunikace v sítích TCP/IP (2)

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Se vznikem internetu se můžeme na síťovou komunikaci v Javě (komunikace mezi více JVM) dívat dvěma pohledy-způsoby:

Komunikační sokety. teorie a implementace v C#, C++ a Javě. Aleš Keprt Katedra informatiky UP duben 2006, revize květen 2007

Soubor jako posloupnost bytů

Práce se soubory v Javě

Úvod do programovacích jazyků (Java)

Soketové připojení Klient InetAddress getbyname() UnknowHostException SecurityException Socket getinputstream() getoutputstream() IOException Server

Identifikátor materiálu: ICT-3-03

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

Příklad aplikace Klient/Server s Boss/Worker modelem (informativní)

KTE / ZPE Informační technologie

Rozhraní Sockets Java a C (BSD)

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

IB111 Programování a algoritmizace. Objektově orientované programování (OOP)

TFTP Trivial File Transfer Protocol

Základy objektové orientace I. Únor 2010

1. Programování proti rozhraní

Site - Zapich. Varianta 1

metodický list č. 1 Internet protokol, návaznost na nižší vrstvy, směrování

8. přednáška: Soubory a proudy

Maturitní otázky z předmětu PROGRAMOVÁNÍ

TÉMATICKÝ OKRUH Softwarové inženýrství

Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost rozhraním a výjimkám.

Ošetřování chyb v programech

PREPROCESOR POKRAČOVÁNÍ

7. Aplikační vrstva. Aplikační vrstva. Počítačové sítě I. 1 (5) KST/IPS1. Studijní cíl. Představíme si funkci aplikační vrstvy a jednotlivé protokoly.

Práce se sítí System.Net

RMI Remote Method Invocation

Dynamicky vázané metody. Pozdní vazba, virtuální metody

1. Téma 12 - Textové soubory a výjimky

Textové soubory. alg9 1

Remote Method Invocation RMI

7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd

Úvod do programovacích jazyků (Java)

Datové struktury. alg12 1

Registrační číslo projektu: CZ.1.07/1.5.00/ Elektronická podpora zkvalitnění výuky CZ.1.07 Vzděláním pro konkurenceschopnost

Vytváření a použití knihoven tříd

Výčtový typ strana 67

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15

Fakulta elektrotechniky a informatiky Vysoká škola báňská - Technická univerzita Ostrava. Cvičení 5 POČÍTAČOVÁ OBRANA A ÚTOK - POU

SOUBORY, VSTUPY A VÝSTUPY POKRAČOVÁNÍ

typová konverze typová inference

Algoritmizace, základy programování, VY_32_INOVACE_PRG_ALGO_01

Konstruktory a destruktory

Programování v C++ 1, 5. cvičení

Programování v C++ 2, 4. cvičení

1 Úvod do sítí TCP a UDP Porty... 1

MATURITNÍ OTÁZKY ELEKTROTECHNIKA - POČÍTAČOVÉ SYSTÉMY 2003/2004 PROGRAMOVÉ VYBAVENÍ POČÍTAČŮ

Úvod do programování - Java. Cvičení č.4

Předmluva k aktuálnímu vydání Úvod k prvnímu vydání z roku Typografické a syntaktické konvence... 20

NMIN201 Objektově orientované programování 1 / :36:09

Class loader. každá třída (java.lang.class) obsahuje referenci na svůj class loader. Implementace class loaderu

Generické programování

Přednáška 3. Opakovače,směrovače, mosty a síťové brány

Více o konstruktorech a destruktorech

6. PRÁCE S DATOVÝMI PROUDY

Obsah přednášky 9. Skrývání informací. Skrývání informací. Zapouzdření. Skrývání informací. Základy programování (IZAPR, IZKPR) Přednáška 9

Programování v C++ 1, 6. cvičení

RMI - Distribuované objekty v Javě

PB161 Programování v jazyce C++ Přednáška 7

Síťové programování. Berkeley sockets Zdroje. Wikipedia Google Jan Kubr

PB161 Programování v jazyce C++ Přednáška 7

8 Třídy, objekty, metody, předávání argumentů metod

NPRG031 Programování II 1 / :25:46

Obsah přednášky. 12. Dokumentace zdrojového kódu Tvorba elektronické dokumentace UML. Co je diagram tříd. Ing. Ondřej Guth

Dědění, polymorfismus

ADT/ADS = abstraktní datové typy / struktury

Regulární výrazy. Vzory

Počítačové sítě Transportní vrstva. Transportní vrstva

Z. Kotala, P. Toman: Java ( Obsah )

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Úvod Třídy Rozhraní Pole Konec. Programování v C# Hodnotové datové typy, řídící struktury. Petr Vaněček 1 / 39

Využití OOP v praxi -- Knihovna PHP -- Interval.cz

Semin aˇr Java V yjimky Radek Ko ˇc ı Fakulta informaˇcn ıch technologi ı VUT Unor 2008 Radek Koˇc ı Semin aˇr Java V yjimky 1/ 25

SIMATIC S IT. Micro Automation. Promoters Meeting October Představení CP IT SPIDER CONTROL TELESERVIS. TESTOVACÍ server.

Abstraktní datové typy: zásobník

Obsah. Úvodem 15. Zaměření knihy 15 Co v knize najdete 15 Doprovodné CD 17 Poděkování 18

Registrační číslo projektu: CZ.1.07/1.5.00/ Elektronická podpora zkvalitnění výuky CZ.1.07 Vzděláním pro konkurenceschopnost

Rozhraní Sockets Java a C (BSD)

Internet protokol, IP adresy, návaznost IP na nižší vrstvy

Maturitní témata Školní rok: 2015/2016

4. ZÁKLADNÍ POJMY Z OBJEKTOVĚ ORIENTOVANÉHO PROGRAMOVÁNÍ

JAK ČÍST TUTO PREZENTACI

Profilová část maturitní zkoušky 2017/2018

Inovace a zkvalitnění výuky prostřednictvím ICT Počítačové sítě Vrstvový model TCP/IP Ing. Zelinka Pavel

Počítačové sítě. Lekce 4: Síťová architektura TCP/IP

Registrační číslo projektu: CZ.1.07/1.5.00/ Elektronická podpora zkvalitnění výuky CZ.1.07 Vzděláním pro konkurenceschopnost

<surface name="pozadi" file="obrazky/pozadi/pozadi.png"/> ****************************************************************************

Dědičnost (inheritance)

Západočeská univerzita v Plzni Fakulta aplikovaných věd Katedra informatiky a výpočetní techniky UPS. FTP Klient. A05463 fboranek@atlas.

Registrační číslo projektu: CZ.1.07/1.5.00/ Elektronická podpora zkvalitnění výuky CZ.1.07 Vzděláním pro konkurenceschopnost

Bridge. Známý jako. Účel. Použitelnost. Handle/Body

Seminář Java II p.1/43

Osnova. GIOP a IIOP IDL IOR POA. IDL Klient Server. 2 Historie. 3 Princip a základní pojmy. 4 Implementace. 5 Aplikace CORBA

InputStream. FilterInputStream

Transkript:

Jak naprogramovat internetovou komunikaci?

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 do tříd v rámci objektově orientovaného programování JAVA,.NET (Microsoft), Python

Rozhraní socketů Je sice nejstarší, ale stále se používá

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

Charakteristika 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

Princip práce se soubory v jazyce C nejprve se soubor otevře; informace o otevřeném souboru se uloží do speciá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

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)

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, porty

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 pak komunikujeme pomocí funkcí write() a read(), jejichž parametr je otevřený socket (kam se posílají data)

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í identifikaci vytvořeného socketu close() dealokuje (zavírá) socket

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, tj. nastaví jej do stavu čekání na příchod požadavků klienta (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á nový požadavek (na rezerv. portu)

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

Funkce přenosu dat read(), write() - spojovaná služba recvfrom(), recvmsg sendto(), sendmsg() čtení a zápis dat do socketu recvfrom zaznamená i příjemce

Spojované služby Klient socket connect write read close Server socket bind listen accept read write close

Nespojované služby Klient socket connect write Server socket bind recvfrom recvmsg read close sendto sendmsg close

Konkurentní TCP server Server (proces) Vlákno (syn) Vlákno (syn) Aplikace rezervovaný port individuální sockety a porty Operační systém

Ukázky, jak se to programuje 1. Vytvoření socketu s=socket(af_inet,sock_stream,tcp) rodina protokolů spojovaná služba protokol TCP

Ukázky, jak se to programuje 2. Bind server: vložení vlastní IP adresy a portu k socketu naplním datovou strukturu pro adresu a port addr.sin_family = AF_INET; port, kde poslouchám addr.sin_port = htons(3434); addr.sin_addr.s_un.s_addr = INADDR_ANY; bind(s,(sockaddr*)&addr,sizeof(addr)) moje adresa

Ukázky, jak se to programuje 3. listen server: čeká na příchod požadavku listen (s,somaxcon); socket max. délka fronty

Ukázky, jak se to programuje 4. listen server: po příchodu požadavku vytvoří nový socket pomocí accept a vytvoří nový proces, který dále komunikuje nový socket //vytvoření nového procesu sx=accept (s, adresa,délka); read(sx,data,vel); write(sx,data,vel);

algoritmičtěji listen (s,somaxcon); while (není_konec) { SOCKET sx = accept(s,adr,delka); fork() //vytvoření syn. procesu { read(s,data,vel); write(s,data,vel); } }

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

Jednoduchý příklad klient, který pošle serveru v TCP paketu jméno souboru server pošle obsah souboru v TCP paketu první slabika v paketu odpovědi signalizuje hodnotou -1, že soubor se nepodařilo otevřít příklad je značně zjednodušen předpokládá se, že soubor se vejde do jediného paketu o max. 100 bytech

Klient int Init_DLL(WORD version) { WSADATA wsadata; return WSAStartup(version, &wsadata); } specialita WIN nutnost inicializovat winsock.dll SOCKET Create_tcp_socket(void) { SOCKET s; s = socket(pf_inet,sock_stream,ipproto_tcp); return s; } int Set_sock_rcv_timeout(SOCKET s, int milisec) { return setsockopt(s, SOL_SOCKET,SO_RCVTIMEO,(char *)&milisec,sizeof(milisec)); }

if ((s=create_tcp_socket())==invalid_socket) { printf("nepodarilo se vytvorit socket."); getchar(); return 2; } err=set_sock_rcv_timeout(s,10000); ZeroMemory((void*)&addr,sizeof(addr)); addr.sin_family = AF_INET; addr.sin_port = htons(4242); addr.sin_addr.s_un.s_addr = inet_addr("127.0.0.1"); printf("spojuji se se serverem...\n"); if (connect(s,(sockaddr*)&addr,sizeof(addr))!= 0) { printf("spojeni se nepodarilo navazat...\n"); closesocket(s); return 2; }

send(s,"text.txt",9,0); printf("cekam na data\n"); int prijato; addr_len = sizeof(addr); if ((prijato=recv(s,paket,100,0))>0) { if (paket[0]==-1) { printf("server soubor nenalezl"); break; } else { for(int i=1;i<prijato;i++) putchar(paket[i]); } } closesocket(s); WSACleanup();

Server ZeroMemory((void*)&addr,sizeof(addr)); addr.sin_family = AF_INET; addr.sin_port = htons(4242); addr.sin_addr.s_un.s_addr = INADDR_ANY; if (bind(s,(sockaddr FAR *)&addr,sizeof(addr))!=0) { printf("nepodarilo se provest bind"); closesocket(s); WSACleanup(); return 2; }

printf("pasivuji socket...\n"); if(listen(s,10)==socket_error) { printf("nepodarilo se vytvorit frontu"); closesocket(s); WSACleanup(); return 2; } addr_len=sizeof(addr_from); novy_s = accept(s,(sockaddr*)&addr_from,&addr_len); printf("prisel pozadavek...\n"); recv(novy_s,jmeno,256,0); printf("pozadavek na soubor %s\n",jmeno); // načtení souboru send(novy_s,packet,celkem_precteno+1,0);

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

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

JAVA sockety, třídy pro práci s IP adresou atd. Microsoft MFC objektové prostředí pro tvorbu aplikací ve Windows.NET pro síťové poskytuje pouze zapouzdřený socket jako CSocket definovány třídy na vyšší úrovni (TCPClient)

Co je OOP? počátky programování strukturované programování posloupnost operací (příkazů) nad relativně jednoduchými daty (matematické výpočty) svět se skládá z objektů, které mají určité vlastnosti; objekty mají mezi sebou nějaké vztahy, něco se s nimi děje

v OOP základní datový prvek objekt sdružuje (zapouzdřuje) data (tzv. atributy) a funkcionalitu (operace nad daty metody) definice podoby objektu se nazývá třída (class) termínem třída se také někdy označuje souhrn objektů stejných vlastností některé objektové programovací jazyky: C++, Java, SmallTalk, Delphi (objektový Pascal)

Příklad (v jazyce C++): // definice struktury adresa typedef struct { char Ulice[20]; //typ retezec int Cislo; char Mesto[20]; } Adresa;

// definice třídy osoba class Osoba { char Jmeno[20]; //atributy char Prijmeni[30]; char RC[12]; Adresa adresa; int Pocet_deti; Osoba* deti[5]; int Ma_narozeniny(); void Pridej_dite(Osoba *dite); Osoba(); }; Konstruktor Atribut strukturovaného datového typu Odkaz (ukazatel) na jiný objekt (zde pole 5 ukazatelů) Metody

konstruktor inicializuje objekt Osoba::Osoba { Pocet_deti = 0; } příklad definice metody: void Osoba::Pridej_dite(Osoba* dite) { deti[pocet_deti] = dite; Pocet_deti = Pocet_deti + 1; }

program obsahuje deklaraci objektů // zde deklarace dvou objektů typu osoba, // konstruktor je automaticky vyvolán Osoba zamest, dite; // staticky Osoba *sef = new Osoba(); //dynamicky kód - operace s atributy, volání metod //POZOR, následující operace přiřazení řetězců nejsou v jazyku C správně, zápis je jen pro ilustraci

zamest.jmeno = "Josef"; zamest.prijmeni = "Novák"; zamest.adresa.ulice = "Hradební"; dite.jmeno = "Markéta"; dite.prijmeni = "Nováková"; zamest.pridej_dite(&dite); zamest.ma_narozeniny(); atd.

V OOP se využívají některé další techniky: dědičnost nově definovaná třída dědí atributy a metody po předcích; metoda může být předefinována řízení přístupu k atributům a metodám private proměnnou nebo metodu nelze použít mimo objekt přetěžování např. více metod se stejným jménem a různým kódem lišící se parametry strukturované ošetření chyb výjimky při chybě se vyhodí výjimka; výjimky se ošetřují v kódu na jednom místě (na dané úrovni)

Princip používání výjimek try { kód if (chyba) throw Vyjimka_sit } catch Vyjimka_sit { reakce na chyby } obsloužení vyjímky vznik výjimky

JAVA

Síťová komunikace v JAVě všechny třídy týkající se sítě jsou soustředěny v knihovně (balíčku) java.net tříd a přidružených definicí je mnoho: asi 36 tříd týkajících se komunikace 12 souvisejících výjimek 6 rozhraní (interface) většina původní složité komunikace pomocí socketů je zjednodušena díky proudům

Balík java.net obsahuje především: třídu pro adresaci InetAddress, URL třídy pro TCP komunikaci URLConnection, Socket, ServerSocket třídy pro UDP komunikaci DatagramPacket, DatagramSocket výjimky ProtocolException, SocketException, ConnectException, PortUnreachableException, UnknownHostException,

Třída InetAddress objekty nesou IP adresu, tj. 32 resp. 128 bitové číslo bez znaménka implementuje IPv4 i IPv6 má potomky Inet4Address a Inet6Address adresa může být typu unicast nebo multicast tj. paket se má dodat na jedno či více míst nemá přímo přístupné konstruktory, objekty jsou vraceny statickými funkcemi

Metody InetAddress getbyname( String host ) adresa hostitele dle DNS. InetAddress[ ] getallbyname( String host ) adresy hostitele dle DNS. InetAddress getbyaddress ( byte[ ] addr ) vytvoří objekt podle adresy zapsané v normálním poli InetAddress getlocalhost( ) adresa lokálního hostitele, tj. moje

byte [ ] getaddress( ) adresa po bytech. String gethostaddress( ) textová reprezentace adresy hostitele. String gethostname( ) jméno hostitele

Příklad: InetAddress a=inetaddress.getbyname("www.seznam.cz"); byte[ ] b=a.getaddress( ); // rozklad na slabiky System.out.println( b[0] + "." +b[1] +"."+ b[2] +"."+ b[3] );

Třída URL nese informace o lokalitě zdroje přetížené konstruktory umožňují vytvořit URL jednak pomocí plné specifikace řetězem, jednak pomocí jednotlivých částí URL při nesprávném zadání vyhodí výjimku MalformedURLException.

Metody getprotocol( ), gethost( ), getfile( ),... umožňují vybírat části URL. URLConnection openconnection( ) vrací objekt typu URLConnection, který reprezentuje spojení (např. komunikaci pomocí http) se vzdáleným objektem, identifikovaným daným URL

Třída URLConnection abstraktní třída reprezentující komunikační kanál mezi aplikací a URL třídy (potomci) HttpURLConnection a HttpsURLConnection podporují přenos HTML stránek protokolem http parametrem konstruktoru je URL vzdáleného počítače spojení se navazuje metodou connect vlastní přenos dat se realizuje pomocí proudů (Stream)

Ukázka: URL url = new URL("http://www.seznam.cz"); URLConnection connection = url.openconnection(); connection.connect(); InputStream is = connection.getinputstream();

Třída Socket implementuje klientský socket Příklady konstruktorů Socket() vytvoří nespojený socket Socket(InetAdress host, int port) vytvoří socket a spojí se (!) se vzdáleným počítačem Socket(String host, int port)

bind(), connect() metody známé z rozhraní BSD socket, (použití při vytváření nespojeného socketu) InputStream getinputstream() OutputStream getoutputstream() vrací vstupní a výstupní proudy, které slouží pro zasílání dat v paketech Příklad dalších metod: getlocaladdress(), isconnected()

Příklad klienta jednoduchý www klient try { Socket sock2 = new Socket("www.linuxsoft.cz", 80); BufferedReader br = new BufferedReader( new InputStreamReader(sock2.getInputStream())); BufferedWriter bw = new BufferedWriter( new OutputStreamWriter(sock2.getOutputStream())); bw.write(request); // zapíšeme http paket bw.flush(); String line = ""; while (line!= null) { line = br.readline(); if (line!= null) System.out.println(line); } sock2.close(); }

Třída ServerSocket implementuje funkce koncového místa TCP spojení na straně serveru funkce souvisí jen s navazováním spojení vlastní přenos dat pomocí TCP je realizován třídou (Socket)

Metody přetížené konstruktory ServerSocket povinným parametrem je port, na který je socket vázán dále je možné specifikovat délku fronty požadavků a omezit lokální adresu IP (má-li počítač více IP rozhraní) InetAddress getinetaddress() vrací lokální IP adresu, na kterou je socket vázán int getlocalport() vrací lokální port

Socket accept() throws IOException čeká na příchozí volání a vrací instanci třídy Socket implaccept(socket s) throw IOException umožňuje v potomcích implementovat vlastní navázání spojení, např. pomocí SSL setsotimeout(int tout), getsotimeout() nastavení a zjištění časových limitů close() uzavření socketu

Příklad klienta - ping String s = args[1] + "\n"; byte [] message = s.getbytes(); int msglen = args[1].length(); Socket data = null; try { data = new Socket(atgs[0],port); } catch (IOException e) { System.out.println(e);System.exit(3); }

try { OutputStream out = data.getoutputstream(); BufferedReader in = new BufferedReader( new InputStreamReader(data.getOutputStream())); out.write(message); out.flush(); String response = in.readline(); System.out.println("Prislo: " + response); in.close(); out.close(); } catch (IOException e) { System.out.println(e); } finaly { data.close(); }

Příklad serveru - ping Socket control = null; try { control = new ServerSocket(port); } catch (IOException e) { System.out.println(e);System.exit(1); } Socket data = null; System.out.println("Cekam na prichod pozadavku\n");

try { data = control.accept(); } catch (IOException e) { System.out.println(e); break; } try { OutputStream out = data.getoutputstream(); BufferedReader in = new BufferedReader( new InputStreamReader(data.getOutputStream())); String inputline = in.readline(); inputline = inputline + "\n"; out.write(inputline.getbytes()); out.flush(); in.close(); out.close(); } catch { } finaly { data.close(); }

Třída DatagramPacket třída připravuje datagramy UDP k odeslání a příjmu DatagramPacket(byte [] ibuf, int ilen) vytvoří paket určený pro příjem (prázdný paket) DatagramPacket(byte [] ibuf, int ilen, InetAddress iaddr, int port) připraví paket určený k vysílání

getlength(), getdata(), getport(), getaddress() podporují analýzu paketu význam funkcí je zřejmý

Třída DatagramSocket představuje zapouzdřený socket pro odeslání a příjem UDP datagramů Konstruktory: DatagramSocket() DatagramSocket(int port) DatagramSocket(int port, InetAddress a) socket spojený s danou lokální adresou

send (DatagramPacket p) receive (DatagramPacket p) odeslání a příjem UDP paketu close() uzavření paketu Poznámka: třída MulticastSocket umožňuje posílat přes sockety IGMP pakety

Microsoft.NET

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

Třídy IPEndPoint TCP/UDP komunikace práce s IP adresou a portem TcpClient, TcpListener spojovaná služba UdpClient nespojovaná služba

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

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

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í

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()

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í

Ukázka v C# //vytvorime instanci posluchace pro urcity //TCP port TcpListener listener = new TcpListener(IPAddress.Loopback, 2000); TcpClient client = null; try { //zacneme naslouchani na urcenem portu listener.start(); //pockame na pripojeni nejakeho klienta client = listener.accepttcpclient();

//po pripojeni si vyzvedneme proud a nacteme z nej data Stream clientstream = client.getstream(); StreamReader reader = new StreamReader(clientStream); string content = reader.readtoend(); } catch (Exception ex) { Console.WriteLine(ex.ToString()); }

UDPClient zapouzdřuje kompletní UDP komunikaci; využívají jej obě strany zajímavé metody Send(byte[ ] data, int velikost) zašle druhému počítači UDP paket byte[ ] Receive(ref 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

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

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

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

Ukázka v C# WebClient client = new WebClient(); Console.Write("Zadejte URI (napr. ) : "); //nacteme URI string uri = Console.ReadLine(); Console.Write("Zadejte nazev stazeneho souboru (napr. C:/new.txt) :"); //nacteme kam se ma soubor ulozit string filename = Console.ReadLine();

try { //stahneme soubor client.downloadfile(uri, filename); Console.WriteLine("Soubor byl stazen."); } catch(webexception ex) { Console.WriteLine("Pri stahovani souboru } doslo k vyjimce : {0}", ex.tostring());

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

Co na závěr podporu IP sítí mají i jiné jazyky, např. Python sockety HTTP, FTP, SMTP