20.03.2017 Views

Raspberry Pi - Uživatelská příručka

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

ČÁST III Programování a hackování<br />

je server vypnutý kvůli údržbě), program vypíše chybovou zprávu a korektně se ukončí. Řádek<br />

s.connect požádá modul soketu, aby se pokusil připojit k serveru IRC pomocí proměnných<br />

hostitel a port, které jsou součástí proměnné irc typu dict.<br />

Pokud program není ukončen kvůli výjimce, znamená to, že se úspěšně připojil k serveru IRC.<br />

Chcete-li získat seznam jmen v kanálu, musíte se však nejdříve serveru identifikovat a zadat<br />

několik příkazů pomocí funkce send modulu socket. Zadejte do programu tyto řádky:<br />

s.send(‚NICK %(prezdivka)s\r\n‘ % uzivatel)<br />

s.send(‚USER %(uzivatelskejmeno)s %(nazevhostitele)s ↩<br />

%(nazevserveru)s :%(skutecnejmeno)s\r\n‘ % uzivatel)<br />

s.send(‚JOIN %(kanal)s\r\n‘ % irc)<br />

s.send(‚NAMES %(kanal)s\r\n‘ % irc)<br />

Funkce send pracuje téměř stejně jako funkce print, ale místo vypisování na standardní<br />

výstup (obvykle okno terminálu nebo konzola) odesílá výstup pomocí síťového připojení.<br />

V tomto případě program odesílá textové řetězce serveru IRC a požádá server, aby jej zaregistroval<br />

s přezdívkou, která je uložena v proměnné prezdivka, a sdělí mu obsah proměnných<br />

uzivatelskejmeno, nazevhostitele, nazevserveru a skutecnejmeno. Poté program odešle<br />

příkaz na připojení ke kanálu, který je nastaven v proměnné kanal, a nakonec odešle příkaz,<br />

kterým si od serveru vyžádá seznam uživatelů v daném kanálu. Tento příklad je sice přizpůsoben<br />

službě IRC, ale stejný základní princip lze využít k zadávání příkazů libovolné síťové<br />

službě. Po úpravách by tento program mohl vypisovat seznam souborů na serveru FTP nebo<br />

nepřečtených e-mailů na serveru POP3.<br />

Přijímání dat ze soketu je trochu složitější. Nejdříve musíte vytvořit prázdnou textovou proměnnou,<br />

která bude sloužit jako přijímací vyrovnávací paměť (receive buffer), která bude<br />

uchovávat data přijatá ze serveru, než je bude možné zpracovat. Inicializujte vyrovnávací paměť<br />

pomocí tohoto řádku:<br />

prijimaci_pamet = ‚‘<br />

Všimněte si, že za symbolem rovnítka následují dvě jednoduché uvozovky, nikoli jedna dvojitá.<br />

Poté zadejte následující řádek, abyste vytvořili prázdný seznam, který bude uchovávat jména<br />

uživatelů:<br />

jmena = []<br />

Datový typ list seznamu je stejný typ, do jakého jste ukládali polohy ve hře Had s malinou.<br />

Oproti normální proměnné může obsahovat více hodnot – v tomto případě se jedná o jména<br />

uživatelů, kteří jsou připojeni ke kanálu IRC.<br />

V dalším kroku vytvořte nekonečný cyklus, ve kterém se bude program neustále dotazovat<br />

serveru na uživatelská jména a vypisovat je na obrazovku. Cyklus začněte příkazem:<br />

while True:<br />

prijimaci_pamet += s.recv(1024)<br />

První řádek cyklu za řádkem while True: požádá modul socket, aby přijal 1 024 bajtů (1 kB)<br />

dat ze serveru IRC a umístil je do proměnné prijimaci_pamet. Vzhledem k tomu, že se místo<br />

168

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!