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



Podobné dokumenty
Práce se sítí System.Net

Jak naprogramovat internetovou komunikaci?

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

WebCIient Client = new WebClient(); Client.DownloadFile(" "ReutersHomepage.htm");

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

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

Jak naprogramovat internetovou komunikaci?

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

Sít ová komunikace v C++

C# - I/O, streamy, práce se soubory

Úvod Informace o prostředí Práce se soubory Regulární výrazy Konec. Programování v C# Soubory a regulární výrazy. Petr Vaněček 1 / 27

Rozhraní Sockets Java a C (BSD)

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

Ošetřování chyb v programech

Druhy souborů. textové. binární. nestrukturované txt strukturované - ini, xml, csv. veřejné bmp, jpg, wav proprietární docx, cdr, psd

HTTP protokol. HTTP protokol - úvod. Zpracoval : Petr Novotný novotny0@students.zcu.cz

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

Site - Zapich. Varianta 1

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

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

Protokoly a Internet. Miloš Hrdý. 19. listopadu 2007

Jazyk C# (seminář 5)

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

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.

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

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

Název závěrečné práce Síťové protokoly a sockety

Koláčky, sezení. Martin Klíma

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

Úvod do programování 8. hodina

TFTP Trivial File Transfer Protocol

Pokud neuvedeme override, vznikne v synu nová (nevirtuální) metoda (a pochopitelně se nezavolá, jak bychom

Překlad jmen, instalace AD. Šimon Suchomel

NIO. Aplikační programování v Javě (BI-APJ) - 12 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha

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

Zajištění kvality služby (QoS) v operačním systému Windows

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

EU-OPVK:VY_32_INOVACE_FIL9 Vojtěch Filip, 2013

RMI Remote Method Invocation

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

Název školy: Základní škola a Mateřská škola Žalany. Číslo projektu: CZ. 1.07/1.4.00/ Téma sady: Informatika pro devátý ročník

Transportní vrstva. RNDr. Ing. Vladimir Smotlacha, Ph.D.

Počítačové sítě. Počítačová síť. VYT Počítačové sítě

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

Telekomunikační sítě Protokolové modely

Rodina protokolů TCP/IP. Rodina protokolů TCP/IP. verze 3. Téma 9: Transportní protokoly. Jiří Peterka

MyIO - webový komunikátor

P-334U. Bezdrátový Wi-Fi router kompatibilní s normou a/g. Příručka k rychlé instalaci

POČÍTAČOVÉ SÍTĚ Metodický list č. 1

Infrastruktura UML. Modelování struktury v UML. Superstruktura UML. Notace objektů. Diagramy objektů

PREPROCESOR POKRAČOVÁNÍ

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

HTTP protokol. Zpracoval : Petr Novotný

Počítačové sítě Systém pro přenos souborů protokol FTP

Programování v Javě I. Únor 2009

Analýza protokolů rodiny TCP/IP, NAT

Internet & Sítě (1. přednáška)

RESTful API TAMZ 1. Cvičení 11

ID Microserver. TCP Server pro čtečky:

Práce se soubory v Javě

Rozhraní SAX, SAX vs. SAX2. Jaroslav Ciml

Programování v Javě I. Leden 2008

Zásobník protokolů TCP/IP

Hypertext Transfer Protocol (HTTP/1.1 RFC 2616) Počítačové sítě Pavel Šinták

Obsah PODĚKOVÁNÍ...11

Počítačové sítě II. 18. World Wide Web, HTTP Miroslav Spousta,

Technologie počítačových sítí 8. přednáška

PB161 Programování v C++ Proudy pro standardní zařízení Souborové proudy Paměťové proudy Manipulátory

a autentizovaná proxy

Osnova přednášky. Informační a řídicí systémy I. Úvod do počítačových sítí. Doporučená literatura. Motivace

Rodina protokolů TCP/IP verze 3

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

Od CGI k FastCGI. Uvedené dílo podléhá licenci Creative Commons Uved te autora 3.0 Česko.

Server. Software serveru. Služby serveru

6. PRÁCE S DATOVÝMI PROUDY

Aplikovaná informatika

Ing. Jitka Dařbujanová. TCP/IP, telnet, SSH, FTP

Informační systémy 2008/2009. Radim Farana. Obsah. Aktivní serverové stránky ASP. Active Server Pages. Activex Data Objects. LDAP database.

Arduino Ethernet Shield W5100 R3

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

WWW a HTTP HTTP protokol HTML jazyk URL identifikace WWW Webov m sto Cookies Komunikace po HTTP Identifikace um stěn specifikaci um stěn

Josef Hajas.

Přístup k transportní vrstvě z vrstvy aplikační rozhraní služeb služby pro systémové aplikace, služby pro uživatelské aplikace DNS

Komunikační protokoly počítačů a počítačových sítí

Tabulková data. budeme pracovat s CSV soubory položky oddělené středníkem, např.

Počítačové sítě II. 14. Transportní vrstva: TCP a UDP. Miroslav Spousta, 2005

Displej DT20-6. Update firmware řadiče. Simulační systémy Řídicí systémy Zpracování a přenos dat TM 2012_10_

Webové služby. Martin Sochor

Základní normalizované datové přenosy

Zadání Vytvoříme jednoduchý multithread HTTP server v jazyce Java Spustíme si ho na lokálním počítači A otestujeme ho Zdrojový kód je v

PŘÍRUČKA UŽIVATELE KOMUNIKAČNÍHO ROZHRANÍ

Studentská unie ČVUT v Praze, klub Silicon Hill. 22. února Ondřej Caletka (SU ČVUT) IPv6 nové (ne)bezpečí? 22.

Počítačové sítě II 17. WWW, HTTP. Miroslav Spousta, 2005

Topologie počítačových sítí Topologie = popisuje způsob zapojení sítí, jejich architekturu adt 1) Sběrnicová topologie (BUS)

Inovace výuky prostřednictvím šablon pro SŠ

Protokol TELNET. Schéma funkčních modulů komunikace protokolem TELNET. Telnet klient. login shell. Telnet server TCP/IP TCP/IP.

Teoretické minimum z PJV

Zápis programu v jazyce C#

Transkript:

Programování v C# Síťová komunikace Petr Vaněček 1 / 33

Obsah přednášky Jednoduchá komunikace Sockety 2 / 33

System.Net Namespace poskytuje jednoduché rozhraní ke standardním protokolům Třída WebClient příjmání a odesílání dat pro různé protokoly http, https, ftp, file směrování pomocí URI (Uniform Resource Identifier) Třídy *WebRequest třídy pro vznesení požadavku Třídy *WebResponse třídy pro získání odpovědi Třída HttpListener jednoduchý posluchač HTTP protokolu 3 / 33

System.Net Další podpůrné třídy pro práci se sítí Třída Cookies podpora pro práci s cookies Třída DNS práce s Domain Name Systémem Třída *EndPoint umožňuje popsat cílový bod síťové komunikace 4 / 33

Třída WebRequest Abstraktní třída HttpWebRequest (http://, https://) FtpWebRequest (ftp://) FileWebRequest (file:// souborový sytém) Pro vytvoření instance WebRequest Create(URI) typ, který se vrátí určuje URI Při chybě se vyvolá chyba WebException Výsledek se získá pomocí odezvy WebResponse GetResponse() Možnost asynchronního přenosu metody BeginGetResponse a EndGetResponse 5 / 33

Třída WebResponse Abstraktní třída HttpWebResponse FtpWebResponse FileWebResponse Pro vytvoření instance WebRequest.GetResponse() Výsledek čitelný pomocí proudu Stream GetResponseStream() 6 / 33

Synchronní komunikace WebRequest pozadavek = WebRequest. Create (" http :// home.pf.jcu.cz /~ vanecek /"); HttpWebResponse odpoved = ( HttpWebResponse ) pozadavek. GetResponse (); Encoding encode = System. Text. Encoding. GetEncoding (" windows -1250 "); Stream proud = odpoved. GetResponseStream (); StreamReader ctenar = new StreamReader ( proud, encode ); string stranka = ctenar. ReadToEnd (); Console. Write ( stranka ); odpoved. Close (); ctenar. Close (); 7 / 33

Třída DNS Statická třída pro práci s Internet Domain Name System Metody IPHostEntry GetHostByName(string) IPHostEntry GetHostByIP(IPAdress) IPHostEntry Resolve(string) vrací DNS informace string GetHostName() vrací jméno lokálního počítače Příklad IPHostEntry hostinfo = Dns. GetHostByName (" home.pf.jcu.cz"); Console. WriteLine (" Host name : " + hostinfo. HostName ); Console. WriteLine ("IP address List : " + hostinfo. AddressList [0]); 8 / 33

Namespace System.Net.Socket Umožňuje vyšší kontrolu kontrolu síťového přístupu Přenos dat jedním z protokolů ProtocolType IP, IPv6, TCP, UDP,... Synchronní i asynchronní komunikace Odlehčené verze TcpClient, TcpListener, UdpClient, IrDAClient, IrDAListener jen synchronní verze (blokující) jednodušší interface 9 / 33

Třída Socket Socket (AddressFamily, SocketType, ProtocolType) AddressFamily adresovací schéma InterNetwork, InterNetworkV6, IrDa SocketType typ socketu Stream, Dgram, Raw,... ProtocolType viz. předchozí slide Musí být správná kombinace adresy, typu a protokolu SocketException 10 / 33

Typy socketů Datagram krátké zprávy pevné délky nepotřebují navázané spojení při posílání není zajištěna bezpečnost protokol UDP 11 / 33

Typy socketů Datagram krátké zprávy pevné délky nepotřebují navázané spojení při posílání není zajištěna bezpečnost protokol UDP Stream navazované obousměrné spojení před odesláním musí být spojení navázané protokol TCP 11 / 33

Typy socketů Datagram krátké zprávy pevné délky nepotřebují navázané spojení při posílání není zajištěna bezpečnost protokol UDP Stream navazované obousměrné spojení před odesláním musí být spojení navázané protokol TCP Raw nutno doplnit IP hlavičku protkoly ICMP, IGMP 11 / 33

Způsob komunikace Synchronní obsluha jedním vláknem blokující Send, Receive, Accept,... Asynchronní obsluha v odděleném vlákně IAsyncResult Begin...(..., AsyncCallback, object) delegát pro obsluhu + uživatelský parametr...end...(iasyncreslut) blokující 12 / 33

Navázání komunikace void Listen(int) neblokující pouze pro spojově orientované protokoly nastaví socket do naslouchacího režimu parametr určuje délku fronty požadavků o spojení void Bind(EndPoint) před voláním Listen se musí volat propojí socket s lokálním koncovým bodem spojení 13 / 33

Navázání komunikace Socket Accept() přijme požadavek o připojení z fronty blokující socket čeká na požadavek v případě prázdné fronty neblokující socket vyvolá výjimku SocketException v případě prázdné fronty void Connect(EndPoint) vytvoří spojení se vzdáleným koncem EndPoint metoda se musí volat pro spojované protokoly 14 / 33

Příklad navázání komunikace server Socket s = new Socket ( AddressFamily. InterNetwork, SocketType. Stream, ProtocolType. IP ); IPEndPoint local = new IPEndPoint ( IPAddress. Parse (" 127.0.0.1 "), 6666); // bude se poslouchat na portu 6666 s. Bind ( local ); // délka fronty je 100 s. Listen (100); // čeká dokud se někdo nepřipojí Socket connection = s. Accept (); 15 / 33

Příklad navázání komunikace klient Socket s = new Socket ( AddressFamily. InterNetwork, SocketType. Stream, ProtocolType. IP ); IPEndPoint local = new IPEndPoint ( IPAddress. Parse (" 127.0.0.1 "), 6666); s. Connect ( local ); 16 / 33

Posílání dat int Send(byte[]) pošle data připojenému socketu vrací počet odeslaných bytů pokud se používá nespojovaný protokol, pak každému volání musí předcházet volání Connect pro spojované protokoly stačí volat Connect nebo Accept jen jednou pro každou relaci int SendTo(byte[], EndPoint) zaměřeno pro nespojované protokoly nemusí se volat Connect není třeba volat Bind použije se nejvhodnější nastavení lze použít i pro spojované protokoly musí se volat Connect EndPoint se ignoruje 17 / 33

Příjímání dat int Recieve(byte[]) přijme data od připojeného socketu funguje pro oba typy protokolů při použití spojovaného protokolu musí být před voláním navázáno spojení Connect nebo Accept při použití nespojovaného protokolu se přečte datagram poslaný ze zdroje uvedeného v Connect blokující soket čeká na data, neblokující vyhodí SocketException property Available obsahuje počet dostupných bytů vrací počet přečtených bytů 18 / 33

Příjímání dat int RecieveFrom(byte[], ref EndPoint) přijme data a zdroj dat uloží do EndPoint je zamýšlena pro nespojované protokoly metodou Connect lze vytvořit implicitního vzdáleného hostitele a data pak budou přijímána pouze od něj lze použít i pro spojované protokoly nutno vytvořit spojení metodou Connect nebo Accept vrací počet přečtených bytů blokující soket čeká na data, neblokující vyhodí SocketException property Available obsahuje počet dostupných bytů pokud buffer nestačí - SocketException 19 / 33

Posílání/příjímání dat klient byte [] msg = Encoding. ASCII. GetBytes (" Posilam ti zpravu "); Console. WriteLine ( Encoding. ASCII. GetString ( msg )); int i = s. Send ( msg ); serever byte [] msg = new byte [100]; connection. Receive ( msg ); Console. WriteLine ( Encoding. ASCII. GetString ( msg )); 20 / 33

Ukončení spojení void Shutdown(SocketShutdown) ukončení komunikace (pouze send, pouze recieve, obojí) void Close() uvolnění systémových prostředků 21 / 33

Asynchronní komunikace Metody Begin... a End... Volá se delegát, který je automaticky spuštěn v jiném vlákně Příklad... { Socket s = new Socket ( AddressFamily. InterNetwork, SocketType. Stream, ProtocolType. IP ); s. Bind ( local ); s. Listen (100); Socket connection = s. Accept (); } msg = new byte [100]; connection. BeginReceive (msg,0,100, SocketFlags.None, new AsyncCallback ( Prijem ), connection );... 22 / 33

Asynchronní komunikace Příklad (pokračování) static void Prijem ( IAsyncResult ar) { Socket socket = ar. AsyncState as Socket ; int bytesread = socket. EndReceive ( ar ); Console. WriteLine ( Encoding. ASCII. GetString ( msg )); } 23 / 33

Použití streamu Slouží pro posílání dat sockety typu stream v blokujícím režimu Podporuje int Read(byte[], int, int) void Write(byte[], int, int) Nepodporuje náhodný přístup k datům property CanSeek má hodnotu false K fungování vyžaduje spojený socket NetworkStream ns = new NetworkStream(Socket); Je potomkem Stream lze aplikovat třídy Stream/Binnary/Reader/Writer 24 / 33

Použití streamu klient s. Connect ( local ); NetworkStream ns = new NetworkStream (s, true ); StreamWriter sw = new StreamWriter ( ns ); while (c!= ( char )13) { c = Console. ReadKey (). KeyChar ; sw. Write (c); sw. Flush (); } sw. Close (); server Socket connection = s. Accept (); NetworkStream ns = new NetworkStream ( connection ); StreamReader reader = new StreamReader ( ns, true ); while (c!= ( char )13) { c = ( char ) reader. Read (); Console. WriteLine (c); } 25 / 33

Socket TCP Třída TCPClient obsahuje jednoduché metody pro posílání a příjímání pomocí protokolu TCP void Connect(IPEndPoint) spojení může být navázáno i v konstruktoru NetworkStream GetStream() získá stream určený pro příjmání i posílání dat musí být navázané spojení metody Write i Read jsou blokující blokující Read lze obejít testováním DataAvailable void Close() uzavře sopjení a uvolní zdroje 26 / 33

Socket TCP Třída TcpListenner nastavení lokálního koncového bodu se provádí již při konstrukci void Start() začne naslouchat void Stop() končí naslouchání bool Pending() vrátí zda se někdo pokouší o spojení TcpClient AcceptTcpClient() naváže spojení 27 / 33

Socket TCP server IPEndPoint local = new IPEndPoint ( IPAddress. Parse (" 127.0.0.1 "), 6666); TcpListener tcplistener = new TcpListener ( local ); tcplistener. Start (); while (! tcplistener. Pending ()) ; TcpClient client = tcplistener. AcceptTcpClient (); NetworkStream s = client. GetStream (); StreamReader r = new StreamReader ( s); StreamWriter w = new StreamWriter ( s); w. Write (c); c=r. Read (); client. Close (); tcplistener. Stop (); 28 / 33

Socket TCP klient IPEndPoint local = new IPEndPoint ( IPAddress. Parse (" 127.0.0.1 "), 6666); TcpClient client = new TcpClient (); client. Connect ( local ); NetworkStream s = client. GetStream (); StreamReader r = new StreamReader ( s); StreamWriter w = new StreamWriter ( s); w. Write (c); c=r. Read (); client. Close (); 29 / 33

Práce s IrDA zařízeními Třída IrDAClient podobně jako TCPClient umožňuje zjistit jméno vzdáleného zařízení RemoteMachineName Třída IrDAListener podobně jako TCPListener Třída IrDADeviceInfo informace o dostupných zařízeních jméno id znaková sada typ počítač, tiskárna, telefon,... 30 / 33

UDP protokol Třída UDPClient nespojovaný protokol metody Connect, Send a Receive navíc možnost používat multicast metoda void JoinMulticastGroup(IPAddress) přidá klienta k multicastové skupině metoda void DropMulticastGroup(IPAddress) opustí multicast skupinu 31 / 33

UDP protokol posluchač UdpClient client = new UdpClient (6666); client. JoinMulticastGroup ( IPAddress. Parse (" 127.0.0.1 " ),2); IPEndPoint ep = null ; byte [] buffer = client. Receive ( ref ep ); Console. WriteLine ( Encoding. ASCII. GetString ( buffer )); odesílatel IPEndPoint local = new IPEndPoint ( IPAddress. Parse (" 127.0.0.1 "), 6666); UdpClient client = new UdpClient (); client. Send ( Encoding. ASCII. GetBytes (" ahoj "),4, local ); 32 / 33

Konec 33 / 33