Streamové a socketové operace

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

Činnost počítače po zapnutí

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

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

Datové proudy objektový vstup a výstup v C++

Textové soubory. alg9 1

Jazyk C práce se soubory. Jan Hnilica Počítačové modelování 16

NPRG030 Programování I, 2010/11

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

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

VISUAL BASIC. Práce se soubory

ZPRO v "C" Ing. Vít Hanousek. verze 0.3

Principy operačních systémů. Lekce 7: Souborový systém

NPRG030 Programování I, 2016/17 1 / :58:13

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

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

Basic256 - úvod do programování Příklady. ing. petr polách

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

NPRG051 Pokročilé programování v C /17 Úkol 2

TC-502L. Tenký klient

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

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

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

TC-502L TC-60xL. Tenký klient

Tematická oblast: Informační a komunikační technologie (VY_32_INOVACE_09_1_IT) Autor: Ing. Jan Roubíček. Vytvořeno: červen až listopad 2013.

Soubor jako posloupnost bytů

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

Healtcheck. databáze ORCL běžící na serveru db.tomas-solar.com pro

Zápis programu v jazyce C#

Vstupní požadavky, doporučení a metodické pokyny

Možnosti aplikace: Copyright 2001, COM PLUS CZ, Praha

Začínáme vážně programovat. Řídící struktury Přetypování Vstupně výstupní operace Vlastní tvorba programů

Copyright 2001, COM PLUS CZ a.s., Praha

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

Práce se soubory. Úvod do programování 2 Tomáš Kühr

Algoritmizace a programování

Vstupní a vstupní proudy v C++

TFTP Trivial File Transfer Protocol

Práce se soubory. Základy programování 2 Tomáš Kühr

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

Vstup a výstup datové proudy v C

Úvod do programovacích jazyků (Java)

C++ Akademie SH. 2. Prom nné, podmínky, cykly, funkce, rekurze, operátory. Michal Kvasni ka. 20. b ezna Za áte níci C++

Programovací jazyk C(++) C++ area->vm_mm->locked_vm -= len >> PAGE_SHIFT;

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

Ing. Michal Martin. Spojení PLC CLICK s NA-9289

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

Obsah přednášky. programovacího jazyka. Motivace. Princip denotační sémantiky Sémantické funkce Výrazy Příkazy Vstup a výstup Kontinuace Program

A7B38UOS Úvod do operačních systémů. 6. Cvičení. Příkazy sed a awk

Operační systémy 2: Zápočtové úkoly

Ganitor. Monitorovací a řídicí I/O moduly pro systém C dubna 2011 w w w. p a p o u c h. c o m v.1.2

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

Knihovna SolarMonitorLib

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

Ošetřování chyb v programech

Linux-příkazový řádek

for (i = 0, j = 5; i < 10; i++) { // tělo cyklu }

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

Práce se soubory v Javě

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

Uživatelský manuál WEB SERVICE V3.0 IP kamer Dahua

18. února 2015, Brno Připravil: David Procházka. Programovací jazyk C++

STRUČNÝ NÁVOD K POUŽITÍ

Principy komunikace s adaptéry periferních zařízení (PZ)

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

Střední průmyslová škola a Vyšší odborná škola, Hrabákova 271, Příbram. III / 2 = Inovace a zkvalitnění výuky prostřednictvím ICT

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

Pokročilé programování v jazyce C pro chemiky (C3220) Vstup a výstup v C++

6. PRÁCE S DATOVÝMI PROUDY

Webový server lapache

Bezpečnost v Javě. Architektura zabezpečení jazyka Java.

ETH2CAN CAN firmware

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

Soubory. Hung Hoang Dieu. Department of Mathematics Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague 1 / 7

Princip funkce počítače

PES lib (C + PASCAL) KNIHOVNY KOMUNIKAÈNÍCH FUNKCÍ 03/ PESlib KOMUNIKAČNÍ KNIHOVNY C, PASCAL 03/ stran 1

Principy operačních systémů. Lekce 8: Ovladače periferií

Datové typy a struktury

Přednáška. Vstup/Výstup. Katedra počítačových systémů FIT, České vysoké učení technické v Praze Jan Trdlička, 2012

8. lekce Úvod do jazyka C 3. část Základní příkazy jazyka C Miroslav Jílek

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

EMBARCADERO DATASNAP. OBSAH Úvod... 2 DataSnap a DBExpress... 2 Serverová část... 2 VCL Klient... 6 Nasazení... 7

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

Broadway 2T. Stručný průvodce instalací

Zadání: TÉMA: Zápis algoritmu, čtení textového souboru, porovnání řetězců.

Měření teploty, tlaku a vlhkosti vzduchu s přenosem dat přes internet a zobrazování na WEB stránce

Bitové operátory a bitová pole. Úvod do programování 2 Tomáš Kühr

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

Jednotlivé hovory lze ukládat nekomprimované ve formátu wav. Dále pak lze ukládat hovory ve formátu mp3 s libovolným bitrate a také jako text.

Martin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. October 17, 2016

ATS Global B.V. ATS Bus.

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

IM Instalace síťové verze SprutCAM. 1Nastavení serveru Vlastní instalace serveru...2 3Nastavení uživatelského počítače...

Algoritmizace a programování

Zpravodaj. Uživatelská příručka. Verze

Více o konstruktorech a destruktorech

Monitorovací systém ALA

Správné vytvoření a otevření textového souboru pro čtení a zápis představuje

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

1 Uživatelská dokumentace

Transkript:

Knihovna wxwidgets Streamové a socketové operace

Streamové operace ve wxwidgets Co je to stream? Třída poskytující standardní rozhraní pro čtení a ukládání dat Nezáleží na původu a formátu dat Třída obsahuje sadu funkcí pro čtení a zápis dat a pro nastavování pozice v souboru dat Pomocí streamů lze pracovat s daty umístěnými v: souborech na disku paměti na síti socketu komprimovaném souboru

Streamové operace ve wxwidgets Streamy jsou v knihovně wxwidgets zapouzdřeny pomocí systému tříd. Struktura streamových tříd: wxstreambase, wxstreambuffer, wxfilestream wxinputstream wxfileinputstream wxmemoryinputstream wxsocketinputstream wxzipinputstream wxfilterinputstream, wxzlibinputstream wxoutputstream wxfileoutputstream wxmemoryoutputstream wxsocketoutputstream WxFilterOutputStream, wxzliboutputstream

wxfilestream wxstreambase wxstreambuffer wxinputstream wxoutputstream wxfileinputstream wxfileoutputstream wxmemoryinputstream wxmemoryoutputstream wxsocketinputstream wxsocketouputstream wxzipinputstream wxfilterinputstream wxfilteroutputstream wxzlibinputstream wxzliboutputstream wxtextinputstream wxtextoutputstream

Funkce pro práci se streamy Input streamy: wxinputstream GetC(), Peek() Read(void* buf, size_t len), Read(wxOutputStream& out) LastRead() SeekI(), TellI() Eof() Output streamy: wxoutputstream PutC() Write(void* buf, size_t len), Write(wxOutputStream& out) LastWrite() SeekO(), TellO()

Třídy pro textový vstup/výstup Vstup textu: wxtextinputstream Read8(), Read16(), Read32(), ReadDouble() ReadLine(), ReadString(), ReadWord() SetStringSeparator() Výstup textu: wxtextoutputstream Write8(), Write16(), Write32() SetMode(), GetMode() wxeol_native, wxeol_dos, wxeol_unix, wxeol_mac WriteDouble() WriteString()

Příklad použití streamů pro souborové operace Vytvoření textového souboru na disku a jeho naplnění daty // vytvoření výstupního souborového streamu wxfileoutputstream fout("data.txt"); // test, zda proběhlo vytvoření streamu v pořádku if(fout.ok()) // vytvoření textového streamu pro textový výstup do datového souboru wxtextoutputstream textout(fout); // nastavení koncù řádků dle operačního systému textout.setmode(wxeol_dos); // výpis textu do souboru textout.writestring("do souboru uložíme 10 čísel typu Uint16:\n"); // uložení deseti 16ti bitových čísel do souboru wxuint16 number = 0; for(int i = 0; i < 10; i++) number++; textout.write16(number); textout.writestring("\n"); } // výstup textu pomocí standardního streamového operátoru << textout << "Tento řetězec byl uložen pomocí operátoru '<<'" << endl; }

Příklad použití streamů pro souborové operace Načtení textového souboru z disku // načtení dat ze souboru a jejich vložení do mema wxfileinputstream fin("data.txt"); // test, zda proběhlo vytvoření streamu v pořádku if(fin.ok()) // vytvoření textového streamu pro čtení ze souboru wxtextinputstream textin(fin); // načtení textu ze souboru a výpis textu do mema myframe->memo->appendtext(textin.readline()+"\n"); // načtení deseti čísel ze souboru a jejich výpis do mema wxuint16 number; wxstring out; for(int i = 0; i < 10; i++) number = textin.read16(); out.printf("%d\n", number); myframe->memo->appendtext(out); } // načtení textu ze souboru a výpis textu do mema while(!fin.eof()) textin >> out; myframe->memo->appendtext(out+" "); }

Příklad použití streamů pro souborové operace Zápis dat do komprimovaného souboru // vytvoření výstupního souborového streamu wxfileoutputstream fcout("compresseddata.txt"); // test, zda proběhlo vytvoření streamu v pořádku if(fcout.ok()) // vytvoření streamu pro uložení komprimovaného souboru wxzliboutputstream compout(fcout, 6); // uložení obsahu mema do komprimovaného souboru wxstring data = myframe->memo->getvalue(); compout.write((void*)data.getdata(), data.len()); }

Aplikace ve wxwidgets Program demonstruje použití streamů pro přístup k souborům uloženým na disku

Socketové objekty a operace Socketové operace a objekty slouží k zajištění komunikace mezi aplikacemi prostřednictvím síťového propojení (LAN, Internet, ) a s jejich pomocí lze velmi jednoduše vytvářet aplikace Client/Server Server Client 1 Client 2 Client n

Socketové objekty a operace Socketové operace jsou v knihovně wxwidgets zapouzdřeny v několika základních třídách: wxsocketbase wxsocketclient wxprotocol wxftp wxhttp wxsocketserver wxsocketevent wxurl

Základní třída wxsocketbase Funkce pro vytváření socketů Obsahuje velké množství funkcí pro: Vytváření socketu Zjišťování stavu socketu Základní I/O funkce I/O funkce I/O funkce s čekáním Funkce pro nastavení chování I/O operací Obsluhu událostí socketu wxsocket_connection wxsocket_lost wxsocket_input wxsocket_output

Třída wxsocketserver Třída slouží jako komunikační server Umožňuje akceptovat příchozí požadavky na spojení Pomocí členských funkcí své mateřské třídy wxsocketbase a systému socketových událostí umožňuje komunikovat s připojenými klienty Při vytváření serveru specifikujeme jeho adresu (IP) a port, pomocí něhož budeme se serverem komunikovat wxipv4address Hostname() Service() LocalHost()

Třída wxsocketclient Třída slouží jako klient při komunikaci klient/server Umožňuje vyhledávat servery a připojovat se k nim Pomocí členských funkcí své mateřské třídy wxsocketbase a systému socketových událostí umožňuje komunikovat se serverem Při vytváření klienta specifikujeme jeho adresu (IP) a port, pomocí něhož budeme komunikovat se serverem wxipv4address Hostname() Service() LocalHost()

Příklad socketů - Server Vytvoření serveru a správce socketových událostí wxsocketserver *m_server; // vytvoření adresy serveru (není-li specifikováno jinak, je to localhost wxipv4address addr; // určení čísla komunikačního portu addr.service(3000); // vytvoření socketového serveru m_server = new wxsocketserver(addr); // test na uspěšnost vytvoření server if (m_server->isok()) // nastavení správce událostí serverových událostí m_server->seteventhandler(*this, SERVER_ID); // budeme reagovat na událost příchozího požadavku na připojení m_server->setnotify(wxsocket_connection_flag); // povolení správce událostí m_server->notify(true); }

Příklad socketů Server (2) Vytvoření serveru a správce socketových událostí // obsluhy socketových událostí void OnServerEvent(wxSocketEvent& event); void OnSocketEvent(wxSocketEvent& event); BEGIN_EVENT_TABLE(MyFrame, wxframe) EVT_SOCKET(SERVER_ID, MyFrame::OnServerEvent) EVT_SOCKET(SOCKET_ID, MyFrame::OnSocketEvent) END_EVENT_TABLE() // obsluha události serveru void MyFrame::OnServerEvent(wxSocketEvent& event) wxsocketbase *sock; switch(event.getsocketevent()) case wxsocket_connection: sock = m_server->accept(false); sock->seteventhandler(*this, SOCKET_ID); sock->setnotify(wxsocket_input_flag wxsocket_lost_flag); sock->notify(true); break; }

Příklad socketů Server (3) Vytvoření serveru a správce socketových událostí // událost socketu void MyFrame::OnSocketEvent(wxSocketEvent& event) unsigned char c; // můžeme mít libovolný počet soketů musím získat ukazatel na ten pravý wxsocketbase *sock = event.getsocket(); // Reakce na události socketu switch(event.getsocketevent()) case wxsocket_input : // provedu operace čtení dat // zakážu další udásti příchodu dat (až do zpracování současných dat) sock->setnotify(wxsocket_lost_flag); sock->read(&c, 1); // znovu povolím událost příchodu dat sock->setnotify(wxsocket_lost_flag wxsocket_input_flag); break; case wxsocket_lost : // provedu operace při ztrátě spojení sock->destroy(); break; }

Příklad socketů Klient Vytvoření klienta a jeho připojení na server wxsocketclient *m_sock; // obsluha událostí socketu void OnSocketEvent(wxSocketEvent& event); BEGIN_EVENT_TABLE(MyFrame, wxframe) EVT_SOCKET(SOCKET_ID, MyFrame::OnSocketEvent) END_EVENT_TABLE() // vytvoření soketu m_sock = new wxsocketclient(); // Nastavení správce událostí soketu m_sock->seteventhandler(*this, SOCKET_ID); // budeme podporovat události připojení k serveru, příchozích dat a ztráty spojení m_sock->setnotify(wxsocket_connection_flag wxsocket_input_flag wxsocket_lost_flag); m_sock->notify(true);

Příklad socketů Klient (2) Vytvoření klienta a jeho připojení na server // otevření spojení wxipv4address addr; addr.hostname(hostname); addr.service(3000); m_sock->connect(addr, FALSE); m_sock->waitonconnect(10); // čekám 10s, zda se zdaří připojení if (m_sock->isconnected()) // spojení bylo úspěšně otevřeno } else // nezdařilo se spojení se serverem m_sock->close(); }

Aplikace ve wxwidgets Program demonstruje použití socketových tříd pro zajištění komunikace po síti