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



Podobné dokumenty
Ú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

Komunikace s automaty MICROPEL. správa systému lokální a vzdálený přístup do systému vizualizace, umístění souborů vizualizace

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

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

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

Platforma x64 a přechod na 64 bitů. Aleš Keprt Univerzita Palackého, Olomouc

Rozhraní Sockets Java a C (BSD)

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

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

Komunikace v sítích TCP/IP (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:

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

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

Operační systémy 2 Základy Windows API

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

Relační vrstva SMB-Síťový komunikační protokol aplikační vrstvy, který slouží ke sdílenému přístupu k souborům, tiskárnám, sériovým portům.

Použití programu WinProxy

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií

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

Analýza protokolů rodiny TCP/IP, NAT

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

1. Směrovače směrového protokolu směrovací tabulku 1.1 TTL

Site - Zapich. Varianta 1

NAS 323 NAS jako VPN Server

Gymnázium Vysoké Mýto nám. Vaňorného 163, Vysoké Mýto

v. 2425a Jak si na PC vypěstovat HTTP (WWW, Web) server a jak ho používat (snadno a rychle) by: Ing. Jan Steringa

PB169 Operační systémy a sítě

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

LAN adaptér. Návod k použití

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

9. Sítě MS Windows. Distribuce Windows. Obchodní označení. Jednoduchý OS pro osobní počítače, pouze FAT, základní podpora peer to peer sítí,

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.

Profilová část maturitní zkoušky 2014/2015

Provádí ochranu sítě před napadením (ochrana počítačů nestačí) Odděluje uživatele (prvek nespolehlivosti) od prvků ochrany

TDP RPort 1.0. uživatelská příručka. 12. července 2007 Na slupi 2a, Praha 2

DUM č. 11 v sadě. 36. Inf-12 Počítačové sítě

Inovace výuky prostřednictvím ICT v SPŠ Zlín, CZ.1.07/1.5.00/ Vzdělávání v informačních a komunikačních technologií

Rocrail. Nejprve: Obecný úvod. Instalace

Ladění ovladačů pomocí virtuálního stroje...2 Úvod...2 Ladění ovladačů pomocí dvou fyzických počítačů...2 Ladění ovladačů pomocí jednoho fyzického

Počítačová síť. je skupina počítačů (uzlů), popřípadě periferií, které jsou vzájemně propojeny tak, aby mohly mezi sebou komunikovat.

Implementace aplikační vrstvy pro jednočipové mikrokontroléry

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

Počítačové sítě. Další informace naleznete na :

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

Profilová část maturitní zkoušky 2015/2016

Vzdálené připojení do sítě UP pomocí VPN

ZAŘÍZENÍ PRO VZDÁLENÝ SBĚR A PŘENOS DAT FIRMWARE

java remote method invocation Kateřina Fricková, Matouš Jandek

Common Object Request Broker Architecture

Vyčtení / zapsání hodnot z/do OMC8000 pomocí protokolu UDP

NAS 224 Vzdálený přístup manuální nastavení

Michal Vávra FI MUNI

Nastavení programu pro práci v síti

Administrace Unixu (Nastavení firewallu)

Desatero, aneb nejčastější chyby v programování

Úvod do počítačových sítí

Radim Dolák Gymnázium a Obchodní akademie Orlová

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

Quido - Telnet. Popis konfigurace modulů Quido protokolem Telnet. 3. srpna 2007 w w w. p a p o u c h. c o m

Lekce 6 IMPLEMENTACE OPERAČNÍHO SYSTÉMU LINUX DO VÝUKY INFORMAČNÍCH TECHNOLOGIÍ JAZYK C

INSTALACE DATABÁZE ORACLE A SYSTÉMU ABRA NA OS WINDOWS

SEMESTRÁLNÍ PROJEKT Y38PRO

TheGreenBow IPSec VPN klient

Administrace služby - GTS Network Storage

Platební systém XPAY [

OBSAH. Stránka 1 z 11 INSTALACE THINPRINT RDP V POČÍTAČI KLIENTA STAŽENÁ Z WEBU 2

Sít ová komunikace v C++

Správa služeb a klientů SQL Serveru

Elektronická pošta. elementární služba, výchozí pro některé další jedna z prvních síťových služeb vůbec. základní principy popisují

Instalace Microsoft SQL serveru 2012 Express

Počítačové sítě Aplikační vrstva Domain Name System (DNS)

Základní datové typy, proměnné - deklarujeme předem - C je case sensitive rozlišuje malá a velká písmena v názvech proměnných a funkcí

Komunikace. Úrovová architektura protokol. Úrovová architektura protokol (2) Pednášky z distribuovaných systém

ABRA POS PRINT SERVER

9. Systém DNS. Počítačové sítě I. 1 (6) KST/IPS1. Studijní cíl. Představíme si problematiku struktury a tvorby doménových jmen.

SOFTWARE 5P. Instalace. SOFTWARE 5P pro advokátní praxi Oldřich Florian

Internet a zdroje. (ARP, routing) Mgr. Petr Jakubec. Katedra fyzikální chemie Univerzita Palackého v Olomouci Tř. 17. listopadu

Komunikace mezi uživateli: možnost posílání dat na velké vzdálenosti

DNS, DHCP DNS, Richard Biječek

IntraVUE Co je nového

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

[Zadejte název společnosti.] Instalace. SOFTWARE 5P pro správu bytového fondu Oldřich Florian

Instalace SQL 2008 R2 na Windows 7 (64bit)

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

Internet. Jak funguje internet. Internetový prohlížeč

Elektronická komunikace

Zásobník protokolů TCP/IP

Další nástroje pro testování

STUDIJNÍ MATERIÁL PRO TECHNICKOU CERTIFIKACI ESET Business Edition, ESET Remote Administrator

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

Rozhraní Sockets Java a C (BSD)

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

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Fakulta informačních technologií

C# - Databáze úvod, ADO.NET. Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí

CZ.1.07/1.5.00/

10 Balíčky, grafické znázornění tříd, základy zapozdření

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

Transkript:

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

Hrajeme proti sobě ale jak na to? Komunikace mezi procesy na jednom počítači Roury Posílání zpráv oknům ve Windows Sokety Komunikace mezi vzdálenými počítači Sokety Komponenty (.NET, COM, CORBA, apod.) 2/23

BSD Socket API Slogan: Léty prověřená kvalita Sada funkcí pro komunikaci po počítačové síti Používá se nejčastěji s protokoly nad IP Výhody: Podpora ve všech operačních systémech Podpora ve všech programovacích jazycích Nevýhody: Základní knihovna má jen blokující operace Systém je neobjektový (rok 1983) 3/23

Nejprve o těch jazycích Socket API je napsáno pro jazyk C BSD Unix má sokety od roku 1983 Původně komerční, od roku 1989 je BSD volně Windows má sokety od roku 1991 (Win 3.11) Různé implementace mimo BSD se od té původní mohou lišit, ale zachovávají princip, na kterém to celé funguje Moderní jazyky mají implementaci objektovou 4/23

A jak je to tedy s těmi jazyky? Unix: Socket API je napsáno pro jazyk C C++ na Unixu používá totéž co C Windows: obsahují Winsock knihovnu Opět primárně pro C a C++, ostatní jazyky to mohou převzít (např. Delphi) C#/Visual Basic/J# používají.net.net obsahuje objektovou verzi soketů Java má sokety zabudované ve své knihovně Opět jde o objektovou implementaci soketů Common Lisp nemá sokety ve standardu Mnohé implementace (jako Lispworks) sokety mají doplněny nad rámec standardu 5/23

Trocha teorie Sokety obvykle používáme nad protokolem IP Komunikujeme spojeně nebo rozpojeně Spojeně: protokol TCP Na začátku navážeme spojení Data pak posíláme stejně, jako když se pracuje se soubory Důsledek: TCP zaručuje doručení každé zprávy, včetně správného pořadí zpráv Rozpojeně: protokol UDP Posíláme samostatné balíčky dat U každého balíčku uvedeme adresáta UDP nezaručuje doručení, ani pořadí zpráv 6/23

Adresování vzdálených počítačů Kdo by tohle neznal? Každý počítač má IP adresu (4 čísla, tj. 32 bitů) Spojení navazujeme vždy na nějaký port Port je číslo identifikující spojení Každé spojení je mezi dvěma síťovými uzly Každý z nich má svou IP adresu a svůj port Většinou zadáme jen adresu a port vzdáleného počítače, lokální jsou doplněny automaticky Naše IP adresa je většinou jasná Náš port nezadáváme, protože je nám to jedno Pozor! Ne-IP protokoly to mohou mít jinak 7/23

Co je to soket? Soket je jeden konec komunikačního kanálu Každé aktivní spojení má dva sokety Nespojovaná komunikace taktéž dva Každý soket má lokální adresu, port a protokol Je-li připojený, má i vzdálenou adresu a port Zajímají nás hlavně TCP sokety Jsou dva druhy TCP soketů Naslouchací soket pro příjem žádostí o spojení Klientský soket pro běžnou komunikaci 8/23

Algoritmus spojování (TCP) Jeden počítač je HOST (hostitel) neboli server Libovolné další počítače jsou CLIENT (klient) 1. Host otevře naslouchací soket a čeká spojení Zadá lokální port, na kterém očekává spojení 2. Klient otevře běžný soket a připojí se k hostu Zadá vzdálenou adresu a port, kam se připojit 3. Připojením dostane host adresu a port klienta Tím mu také vznikne běžný soket Běžné sokety jsou nyní propojeny 4. Host může nyní čekat na připojení dalšího klienta 5. Komunikace končí, když jedna strana zavře soket 9/23

Jak probíhá komunikace Komunikační kanál je obousměrný Každá strana může libovolně zapisovat i číst Když pošleme víc zpráv krátce po sobě, na klienta dojde jedna spojená zpráva Funkce pro čtení i zápis jsou blokující Funkce se vrací, až jsou data poslána/přijata Někdy to může být dost problém budeme to řešit později 10/23

Příkazy BSD Socket API connect() připojí k hostiteli socket() založí socket nějakého protokolu bind() sváže soket s lokální adresou a portem listen() nastaví soket do naslouchacího režimu accept() přijme žádost o spojení, vrací soket recv/send komunikují 11/23

Hrajeme dámu po síti Musíme si rozmyslet náš protokol Protokol = pravidla chování Zkusíme to takhle: 1. Posíláme textové zprávy (kódování 8bit) 2. První bajt ve zprávě je délka zbytku zprávy 3. Klient vždy čeká na příkaz od hosta 4. Po provedení příkazu klient odešle odpověď 5. Kdokoliv může kdykoliv poslat quit, čímž ukončí spojení 12/23

Příkazy našeho protokolu Příkazy dark a light nastaví barvu, za kterou bude hráč hrát Odpověď: ok Příkaz yourmove se dotáže na tah Odpověď má tvar mymove a1b2 Příkaz move a1b2 oznámí tah druhého hráče Odpověď: ok Nyní si to můžeme předvést v praxi 13/23

Klient v C#.NET má třídu Socket reprezentující soket a třídu TcpClient pro snazší práci s TCP protokolem Nejprve připojíme TcpClient socket = new TcpClient(host, port); Můžeme posílat zprávy socket.client.send(byte[] buffer); Můžeme přijímat zprávy socket.client.receive(byte[] buffer); Zavřeme soket socket.close(); vrací počet bajtů 14/23

Klient v Javě Java má třídu Socket reprezentující soket Je to velmi podobné.netu Nejprve připojíme Socket socket = new Socket(host, port); Můžeme posílat zprávy socket.getoutputstream().write(char[] buffer); Můžeme přijímat zprávy socket.getinputstream().read(char[] buffer); Zavřeme soket socket.close(); vrací počet bajtů 15/23

Klient v C/C++ Co nám C# a Java udělá pomocí čtyř příkazů, na to v C/C++ potřebujeme 50 řádků kódu První problém: názvy síťových adres Je nutno složitě rozlišovat mezi číslem a jménem Druhý problém: není to objektové Nemáme žádnou entitu, která by si kompletně pamatovala stav soketu Musíme pracovat zvlášť se soketem a adresami Místo výjimek to jen vrací různá chybová čísla 16/23

Klient v C/C++ adresa hostitele Nejprve sestavíme adresu hostitele HOSTENT *host = 0; unsigned long ip = inet_addr(hostname); if(ip!=inaddr_none) { //číselná IP adresa host = gethostbyaddr((char*)&ip, 4, AF_INET); } else { //jmenná adresa } host = gethostbyname(hostname); if(host==0) throw NetException("Can t find host"); 17/23

Klient v C/C++ vytvoření soketu SOCKET client_socket = socket(af_inet, SOCK_STREAM, IPPROTO_TCP); if(client_socket == INVALID_SOCKET) { } SOCKADDR_IN server_sin; server_sin.sin_family = AF_INET; server_sin.sin_addr = *((LPIN_ADDR)*host->h_addr_list); server_sin.sin_port = htons(port); //port number ošetření chyby if(socket_error == connect(client_socket, (SOCKADDR*)&server_sin, sizeof(sockaddr))) { } 18/23

Klient v C/C++ práce se zprávami Posíláme zprávy send(socket s,const char*buf,int len,int flags); Přijímáme zprávy recv(socket s,const char*buf,int len,int flags); Zavřeme soket closesocket(socket s); //Windows close(int s); //BSD vrací počet bajtů 19/23

Klient v C/C přenositelnost Jak známo C/C++ jsou velmi přenositelné Proto musíme program pro každý operační systém speciálně upravit Windows (Winsock) Na začátku musíme volat WSAStartup(ver,&data); Zde zvolíme požadovanou verzi Winsock Na konci voláme WSACleanup(); Všechny datové struktury jsou big endian BSD Místo SOCKET se používá přímo int (jazyk C je stejně jen slabě typovaný) 20/23

Server v C# Nejprve vytvoříme naslouchací soket TcpListener listener = new TcpListener(port); Začneme naslouchat listener.start(); Přijmeme spojení TcpClient client = listener.accepttcpclient(); Objekt client je běžný TCP soket Ukončíme naslouchací soket listener.close(); Poznámka: V C/C++ to určitě dělat nebudeme 21/23

Neblokující sokety Výchozí režim soketů je blokující Blokující operace zasekne program Týká se operací accept, recv, send Neblokující operace můžeme udělat několika způsoby 1. Neblokující sokety pomocí ioctl(), toto řešení je systémově závislé 2. Multiplexování soketů styl wait for many 3. Pomocí událostí jen ve Windows 4. Pomocí vláken vytvoříme víc vláken, takže pak nevadí, když se vlákno zasekne 22/23

Další čtení Richard Blum: C# Network Programming. Sybex, 2002, ISBN 0782141765. M. Tim Jones: BSD Sockets Programming from a Multi-Language Perspective. Charles River Media, 2003, ISBN 1584502681. 23/23

Mgr. Aleš Keprt, Ph.D., 2006 Vytvořeno pro potřeby přednášky na UP Olomouc. Tento text není určen pro samostudium, ale jen jako vodítko pro přednášku, takže jeho obsah se může čtenáři zdát stručný, nekompletní či možná i chybný. Použití je povoleno dle vlastní libosti, ale jen na vlastní nebezpečí. V případě dalšího šíření je NUTNO uvádět původního autora a odkaz na původní dokument. Komentáře můžete posílat e-mailem autorovi (adresu najdete přes Google).