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