Python je interpretovaný, interaktívny programovací jazyk. Začal vznikať v roku 1989 vo výskumnom ústave v Amsterdame. Vytvoril ho Guido van Rossum, pôvodne ako skriptovací jazyk pre Amoeba OS schopný systémových volaní. Názov jazyka vôbec nevznikol z názvu druhu hada. Autor nazval jazyk podľa populárneho britského satirického seriálu Monty Python's Flying Circus. Ale napriek tomu sa názov jazyka často asociuje práve s hadom a nie s filmom. Je vyvíjaný ako open source projekt, a je v súčasnosti pri verzii 3.1.2. Python podporuje objektovo orientované, štruktúrované aj funkcionálne programovanie.
Je to dynamicky typový jazyk, podporuje veľké množstvo vysokoúrovňových dátových typov a na správu pamäte používa garbage collection. Zdrojové kódy interpretra Pythonu a štandardné knižníce sú volne dostupné na stiahnutie z domovskej stránky Pythonu http://www.python.org/ a je možné ich ďalej volne modifikovať a distribuovať. Na tejto stránke tiež najdete množstvo odkazov na dalšie moduly, programy a nástroje určené použivateľom Pythonu. Je to programovací jazyk pre minimalistov, presne podľa motta "less is more". Pri jeho vývoji stavili na tieto koncepty:
Python je mnohými považovaný za jeden z tých, ak nie najpoprednejším jazykom pre tvorbu GUI kvôli jeho rapídnej možnosti zmeny. Prešiel štandardnými rozhraniami pre implementáciu prenositeľných GUI, ktoré vyzdvihujú prirodzený vzhľad a cit podkladovej platformy, čo je veľmi silná vlastnosť. Python môže byť tiež použitý pre vývoj GUI na špecifickej platforme Windows, X Windows alebo Macintosh, a KDE a GNOME rozhrania pre Linux.
Naviac ľahko manipuluje s HTML, Python prišiel so štandardným modulom pre sockety, skriptovanie na strane servera, spracovanie XML, FTP a viac. A čo viac, existuje nerozoznateľné Python/Java integrácia nazvaná JPython, ktoré Vám umožní vytvoriť applety na strane klienta a komunikovať s Java knižnicami.
Python je zďaleka jedným z najčitateľnejších jazykov, ktoré sa dnes používajú. Hoci to neznamená, že Python tvorí objemný kód. V skutočnosti, väčšina programátorov zistí, že môžu napísať na dva, tri riadky Pythonu, čo predtým zabralo desať alebo viac riadkov v C++.
Programy napísané v jazyku Python bežia obyčajne pomalšie ako Java programy, na druhej strane však vyžadujú menej času na vývoj. Python programy sú typicky 3 až 5 krát kratšie ako ekvivalentné Java programy. Tento rozdiel vyplýva z toho, že Python má zabudované vysoko-úrovňové dátové typy a dynamické pretypovanie. Python programátor sa nemusí zapodievať napr. deklarovaním typov premenných alebo argumentov funkcií.
To isté čo o Jave platí aj o jazyku C++ a naviac: ak Python kód je typicky 3-5 krát kratší ako Java kód, tak pri C++ je to 5-10 krát. Hovorí sa, že jeden Python programátor dokáže dokončiť za dva mesiace to, čo nedokážu dokončiť dvaja C++ programátori za rok.
Na webe http://www.python.org/ nájdete verzie pre operačn systémy Windows, Linux, Mac OS X a dalšie.
Ak máme nainštalovaný python a cestu máte v PATH tak pre spustenie interpretera do príkazového riadku zadáme python a stlačíme Enter a mali by sme dostať nejaký takýto výpis.
Microsoft Windows [Version 6.1.7600] Copyright (c) 2009 Microsoft Corporation. Všetky práva vyhradené. C:\Users\Maros>python Python 2.7 (r27:82525, Jul 4 2010, 07:43:08) [MSC v.1500 64 bit (AMD64)] on win 32 Type "help", "copyright", "credits" or "license" for more information. >>>Interpreter pythonu môžeme spúšťať aj priamo kliknutím na python.exe v adresári, kde sme ho nainštalovali. Interpret ukončíme kombinací Ctrl-Z(platí pre Windows), krížikom alebo zadáme:
import sys sys.exit()Teraz si môžeme vyskušať niektoré jednoduché príkazy:
>>> print "Hello, world" Hello, world >>> x = 12*2 >>>x/2 12 >>> # toto je komentarPodľa zavedenej konvencie pythonovské súbory maju koncovku * .py . Teda napríklad helloworld.py. Stačí do neho napisat print 'Hello World!' a spustiť príkazom python helloworld.py. Výsledok:
C:\Users\Maros>python helloworld.py Hello, world!
Viac sa dozviete na odkazoch:
Do premenných ukladáme čísla, reťazce a ďalšie dátové štruktúry. Pričom sa premenné nedeklarujú ale typ premennej je určený automaticky. Meno premennej môže obsahovať písmená, čísla a podtržítka '_'. Python rozlišuje medzi malými a veľkými písmenami. Nesmú sa tiež používať rezervované slová.
>>> passe = 3 # bez chyby >>> pass = 3 # chyba, pass je rezerovane slovo >>> x, y, z = 1, 2, 3 # x=1, y=2, z=3 >>> x = y = z = 0 # x=0, y=0, z=0
Viac o premenných, výrazoch a príkazoch na odkazoch:
Python rozlišuje mezi číslami celými (integer a long integer), reálnými a imaginárními:
num1 = 123 # klasický 32bitový integer. num2 = 123456789L # dlhý integer, obmedzený je len veľkosťou operačnej pamäte num3 = 987.654 # reálne číslo num4 = 321j # imaginárne číslo num5 = 1 + 3.1415j # komplexné číslo num6 = num7 = 0 # viacnásobné priradenie num1 += 10 # spojené operátory
Viac o číslach a operáciach nad nimi v dokumentácii, alebo na odkazoch:
V Pythone sú sekvenčnými dátovymi typmi reťazce, polia a tuple. Pri reťazcoch sa za sekvenciu považujú jednotlivé znaky, pri tuple a poliach sú to jednotlivé prvky. Ku všetkým sekvenčným dátovým typom môžeme pristupovať pomocou indexov alebo slice notácie. Reťazce a tuple sú nemenné, prvky polí sa dajú meniť!
Základné funkcie pre prácu so sekvenčnými dátovými typmi:
min(s) | vráti najmensí prvok zo sekvencie s |
max(s) | vráti najväcsí prvok zo sekvencie s |
len(s) | vráti počet prvkov v poli alebo tuple pri použití na retazec jeho dĺžku |
s1 + s2 | spojí sekvenciu s1 so sekvenciou s2 |
seq * x | opakuje sekvenciu seq x-krát, pričom x musí byť prirodzené číslo |
Ďalší odkaz na všeobcne popisane Dátové typy:
Tuple je prvím zo sekvenčních typou. Patrí medzi tzv. immutable sekvencie, po jeho vytvorení sa nedajú jeho prvky meniť.
>>> t1 = (1, 2, 3, 4) # jednotlivé prvky tuple sa zapisuju oddelene čiarkou, >>> t2 = 1, 2, 3, 4 # zátvorky niesu povinné >>> t3 = (1, ’jedna’, ’one’) # môže obsahovať prvky rôzných typov >>> t4 = () # práznu tuple získame takto , nieje možné vynechať zátvorky >>> t5 = (2, ) # tuple o jednom prvku - nesmieme zabudnut na čiarku >>> tuples = (t1, t2, t3) # daju sa do tuple vložiť aj iné tuple
Nejaké odkazy o tuple:
Je obdobou typu tuple. Jediným rozdielom je, že zoznam je sekvencia premenných, tj. jednotlivé prvky zoznamu môžeme meniť.
>>> s1 = [1, 2, 3, 4] # používame hranaté zátvorky >>> s2 = [] # prázdny zoznam >>> s3 = [2] # zoznam o jednom prvku >>> s=['python', 'je', 'jazyk'] >>> s[2]=['skriptovaci', 'jazyk'] #vnorenie dalšieho pola >>> s ['python', 'je', ['skriptovaci', 'jazyk']] >>> s[2][1] #pristup pomocou dvojitého indexovania 'jazyk'
Niektoré funkcie na prácu so zoznamami:
a.append(x) | na koniec pola a pripojí objekt x |
a.extend(P) | na koniec pola a pripojí pole P |
a.insert(i, x) | na pozíciu (index) v poli a, danú argumentom i, priradí hodnotu x |
a.remove(x) | prepíše prvý prvok pola a s hodnotou x |
a.pop(i) | zmaže a vráti prvok pola a z pozície i; pri nezadaní argumentu, zmaže a vráti posledný prvok pola |
a.index(x) | vráti index prvého prvku s hodnotou x v poli a, v prípade, že žiadny prvok pola nemá hodnotu x, vráti chybu |
a.count(x) | vráti, info o tom, kolkokrát sa nachádza prvok s hodnotou x v poli a |
a.sort() | zoradí prvky pola a podla abecedy |
list(sekvencia) | vráti pole, ktorého prvky sú prebraté zo sekvencie |
del a[x] | zmaže prvok pola a s indexom x, dá sa použit aj so slice notáciou a môže zmazávať celé premenné |
Viac o poliach:
Ďalšou užitočnou konstrukciou je slice, ktorá umožnuje akýkoľvek sekvenční typ doslova „rozrezať na kúsky. Slice podobne ako indexy používa hranaté zátvorky, v ktorých sú, ale uvedené dve celé císla oddelené dvojbodkami.Prvné z čísel znamená dolnu hranicu pre výber prvku, druhé je horná hranica, dokonca nieje chybou, ak sú čísla mimo rozsah platných indexov.
>>> zoznam = (1, 2, 3, 4, 5) >>> zoznam[3:5] (4, 5) >>> zoznam[0:4] (1, 2, 3, 4) >>> zoznam[0:50] (1, 2, 3, 4, 5) >>> zoznam[:3] (1, 2, 3) >>> zoznam[1:] (2, 3, 4, 5) >>> zoznam[:] (1, 2, 3, 4, 5) >>> zoznam[-1:] (5,)
Reťazce patria medzi skvenčné dátové typy.Reťazec vytvoríme tak, že obsah premennej uzatvoríme medzi apostrofy alebo medzi úvodzovky
>>>"hello"+"world" # spájanie helloworld >>>"hello"*3 # stringy vieme násobiť hellohellohello >>>"hello"[0] # indexovanie h >>>"hello"[-1] # od konca o >>>"hello"[1:4] # substringy ell >>>len("hello") # dĺžka 5 >>>"hello" < "jello" # porovnanie 1 >>>"e" in "hello" # vyhľadávanie 1
Escapovacie znaky:
\ prázdna escape sekvencia \\ spätné lomítko (\) \' apostrof (') \" úvodzovka (") \a pípnutie (BEL) \b backspace (BS) \e escape (ESC) \n nový riadok \0XX ASCII znak v oktánovej sústave s hodnotou XX \xXX ASCII znak v hexadecimalnej sústave s hodnotou XX
Niektoré základné funkcie pre prácu s reťazcami
repr(s) | vráti argument s v apostrofoch |
str(s) | vráti argument s ak je retazec, ak s nie je retazec, tak ho konvertuje na retazec a vráti |
V úvode použitá funkcia print poskytuje možnosť formatovaného výstupu
>>> print "Sucet cisla %d a cisla %d je: %d" % (2,5,2+5) Sucet cisla 2 a cisla 5 je: 7
%x | číslo v šestnástkovom tvare |
%0.3f | reálne císlo zaokruhlené na tri desatiné miesta |
%3d | celé císlo, pričom vľavo sa doplnia medzery tak, aby číslo malo 3 znaky |
%03d | celé číslo, pričom vľavo sa doplnia nuly tak, aby číslo malo 3 znaky |
Viac o reťazcoch:
Ide o pole, kde sa pre indexovánie prvku používá ľubovoľný objekt. Jediné obmedzenie na tieto objekty (kľúč) je, aby z nich bolo možné určiť ich hash. To ide iba pre objekty nemenné (immutable sekvencie, reťazce, čísla a dalšie, viď dokumentacia k Pythonu).
>>> znamky = {’Voprsalek’: 3, ’Macha’: 5, ... ’Novak’: 1} >>> znamky[’Voprsalek’] 3 >>> znamky[’Macha’] = 4 >>> znamky[’Svec’] = 2 >>> znamky {’Svec’: 2, ’Macha’: 4, ’Voprsalek’: 3, ’Novak’: 1}Objekty typu asociativne pole majú niekoľko metód (clear, copy, get, has key, items, keys, setdefault, update, values).
Viac o mapách:
Python používá iba tri konštrukcie riadenia programu.Sú to if, for a while.
>>> D = 2 >>> if D > 0: ... print ’rovnica ma 2 resenia’ ... elif D == 0: ... print ’rovnica ma 1 resenia’ ... else: ... print ’rovnica nema resenia’ ... rovnice ma 2 resenia
Používa sa na iterovanie cez elementy v sekvenčných dátových typoch alebo iných iterovateľných objektoch Zvláštnosťou Pythonu je, že i cyklus for môže mať časť else, ktorá se vykoná po spracovaní všetkých prvkov sekvencie. Ak je cyklus prerušený pomocou break alebo v jeho tele dôjde k výnimke, časť else sa nevykoná.
>>> sucet = 0 >>> for cislo in range(50): ... sucet += cislo ... else: ... print ’sucet cisel od 0 do 49 je’, sucet ... sucet cisel od 0 do 49 je 1225Príklad iterovania zoznamu:
>>> zoznam = [1, 2, 3] >>> for item in zoznam[:]: ... print ’pridavam’, item ... seznam.append(item) ... else: ... print ’zoznam bol zdvojeny’ ...Ak chcem iterovať zoznam pomocou celých čísel použijeme funkciu range();
>>> range(9) [0, 1, 2, 3, 4, 5, 6, 7, 8] >>> range(2, 9) [2, 3, 4, 5, 6, 7, 8] >>> range(2, 9, 2) [2, 4, 6, 8]
>>> cislo = 0 >>> sucet = 0 >>> while cislo < 50: ... sucet += cislo ... cislo += 1 ... else: ... print ’sucet cisel od 0 do 49 je’, sucet ... sucet cisel od 0 do 49 je 1225break- ukončenie for alebo while cyklu. continue- ukoncenie iteracie for alebo while cyklu. pass- používa sa ak si syntax vyžaduje príkaz pričom nechceme, aby sa niečo vykonalo.
Viac o riadiacích štruktúrach:
Definícia funkcie je uvedená kľúčovým slovom def. Po kľúčovom slove následujú meno funkcie a formálne argumenty. Následujúce príkazy, tvoria telo funkcie Telo funkcie je blok kódu a preto musí býť odsadené.
>>> def fib(n): # vypiš Fibonacciho rozvoj do n ... """Vypiše Fibonacciho rozvoj do n.""" #dokumentácia ... a, b = 0, 1 ... while b < n: ... print b, ... a, b = b, a+b ...
Volanie funkcie:
>>>fib(2000) 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597
Príklad
>>> def tiskni_text(answer, text = ’nedefinovan’, pocet = 1): ... for foo in range(pocet): ... print answer, text or ’prazdny retezec’ ... >>> tiskni_text(’Parametr text je’) Parametr text je nedefinovan >>> tiskni_text(’Parametr text je’, ’obycejny text’) Parametr text je obycejny text >>> tiskni_text(’Parametr text je’, ’obycejny text’, 3) Parametr text je obycejny text Parametr text je obycejny text Parametr text je obycejny text >>> tiskni_text(answer = ’Parametr text je’, text = ’obycejny text’) Parametr text je obycejny text >>> tiskni_text(’Parametr text je’, pocet = 3) Parametr text je nedefinovan Parametr text je nedefinovan Parametr text je nedefinovanPoužitie identifikátorov.Do premennej identifikator sú pri použití syntaxe *identifikator uložené všetky nadbytočné pozičné parametre, pri syntaxy **identifikator všetky nadbytočné keyword parametry.
>>> def tiskni_text(answer, text = ’nedefinovan’, *args, **kwargs): ... print answer, text or ’prazdny retezec’ ... print ’zbyvajici pozicni parametry:’, args ... print ’zbyvajici keyword parametry:’, kwargs ... >>> tiskni_text(’Parametr text je’, ’linux’, ’Ahoj’, server = ’www.root.cz’) Parametr text je linux zbyvajici pozicni parametry: (’Ahoj’,) zbyvajici keyword parametry: {’server’: ’www.root.cz’}
Viac o funkciách:
Modul je súbor, obsahujúci definície a príkazy určené pre použitie v iných programoch Pythonu. Mnohé moduly sú štandardnou súčasťou Pythonu a sú uložené v jeho standardnej knižnici.
>>> import sys >>> from hocico import def1,def2 >>> from hocico import *Po importovaní ak napišeme dir(hocico) vypíše sa zoznam funkcií v danom module. Funkciu modul použijeme napr. takto:hocico.def1.
Niektoré moduly:
Viac o moduloch:
Výpis súboru:
subor = open("ahoj.txt","r") for line in subor.readlines(): print line subor.close()
Kopirovanie súboru:
subor = open("ahoj.txt","r") kopia = open("ahoj.bak","w") for line in subor.readlines(): kopia.write(line) # od verzie 2.0 funguje nova konvencie # pre zapis do suboru (z dovodu prehladnosti) # print >>> kopia, line print "subor skopirovany" subor.close() kopia.close()Výpisanie len prvého riadku
subor = open("ahoj.txt","r") lines = subor.readlines() #vrati zoznam riadkov print lines[0]Zápis na koniec
subor = open("ahoj.txt","a") subor.write("Text.") subor.close()
import pickle pickle.dump(x, f) #zapis x = pickle.load(f) #nacitanie
Viac o práci zo súbormi:
Modul py2exe umožnuje vytvoriť z daného skriptu samostatný windows program s priponou *.exe. Ak chceme so svojho skript.py súboru urobiť subor skript.exe, tak si napišete k tomu ešte jednoduchý skripk setup.py.
# setup.py from distutils.core import setup import py2exe setup(name="skript", scripts=["skript.py"],)A všetko to spojíme dokopy jednoduchým prikazom v príkazovom riadku windowsu v mieste, kde sa nachádza python.exe subor. C:\Program Files\Python22>python setup.py py2exe V tomto adresari sa vytvoril nový adresar dist\skript, v ktorom sa nachádza subor skript.exe spoločne so suborom python22.dll.
Objektovo-orientované programovanie je dôležitou súčasťou Pythonu. V Pythone sú všetky atribúty verejné a metódy sú virtuálne. To znamená, že hocikedy môžeme pridávať nové metódy. Python je veľmi dynamický jazyk. Špecifikácie prístupu k atribútom a metódam public, private a protected, známe z iných objektovo orientovaných jazykov Python nepoužíva. Z každej zadefinovanej triedy Python dovoľuje ľubovoľne dediť jej inštancie, t.z. objekty, pričom každý z nich má vlastné charakteristiky a metódy a môže byť teda s každým takýmto objektom manipulované nezávisle od ďalších objektov. To že môžeme triedy definovať v samostatných súboroch a neskôr importovať tieto súbory len na miestach, kde chceme danú triedu použiť, nám umožňuje udržiavať zdrojový kód modulárny a jednoducho meniteľný.
Viac o objektovom programovaní v pythone:
V tejto prezentácií nespomenieme vlákna v Pythone,rôzne pokročilé techniky, grafiku, teda GUI,chyby a výnimky, perzistencia objektov, komunikácia medzi procesmi atď. To všetko sa dozviete na webe v rôznych tutorialoch a v dokumentácií.
Klientská časť protokolu SMTP, viď http://www. faqs.org/rfcs/rfc821.htmlje v Pythone implementovaná v modulu smtplib. Ďalšie moduly, ktoré sa starajú o maili sú imaplib, poplib. Modul smtplib poskytuje triedu SMPT. Pomocu jej metód sa môžeme pripájať k SMTP serveru ,odosieľať e-mail a odpojiť sa.
import smtplib import sys od = raw_input("Od: ") pro = raw_input("Pro: ") predmet = raw_input("Predmet: ") msg = ("From: %s\r\nTo: %s\r\nSubject: %s\r\n\r\n" % (od, pro, predmet)) print "Zadajte text správy, ukoncete stiskem ^Z na samotnom riadku:" msg += sys.stdin.read() server = smtplib.SMTP(’localhost’) # zadáme SMTP server server.sendmail(od, pro, msg) server.quit()
Tu len v krátkosti. Na obsluhu FTP protkolu je v pythone implementovaný modul ftplib.
Pre prácu s klientskou častou protokolu HTTP má python modul httplib. Obsahuje triedy HTTPConnection a HTTPResponse. Viac v dokumentácií.
>>> from httplib import HTTPConnection >>> conn = HTTPConnection(’www.root.cz’) >>> conn.request(’GET’, ’/’) >>> r = conn.getresponse() >>> print r.status, r.reason 200 OK >>> data = r.read() >>> conn.close()
Modul urllib je vysokoúrovňová nadstavba mad moduly httplib a ftplib.Dokáže otvorit súbory pomocu protokolu HTTP a FTP a nakoniec vráti súborový objekt, ktorý má rovnake rozhranie ako štandarný súborový objekt vrátaní funkciou open().Tento program nám vypiše html dokument na tejto adrese
# -*- coding: utf-8 -*- from urllib import urlopen f = urlopen("http://www.root.cz") r = f.read() print r
Tento modul rozširuje funčnost modulu urllib2. Príklad:
import urllib2 url = 'http://tycho.usno.navy.mil/cgi-bin/timer.pl' for line in urllib2.urlopen(url): if 'EST' in line or 'EDT' in line: print line
Nov. 25, 09:43:32 PM EST
Pre low level access použijeme modul socket. Socket vytvorime pomocou metódy:
s = socket.socket()
Method | Description |
---|---|
s.bind() | This method binds address (hostname, port number pair) to socket. |
s.listen() | This method sets up and start TCP listener. |
s.accept() | This passively accept TCP client connection, waiting until connection arrives (blocking). |
Method | Description |
---|---|
s.connect() | This method actively initiates TCP server connection. |
Method | Description |
---|---|
s.recv() | This method receives TCP message |
s.send() | This method transmits TCP message |
s.recvfrom() | This method receives UDP message |
s.sendto() | This method transmits UDP message |
s.close() | This method closes socket |
socket.gethostname() | Returns the hostname. |
Jednoduchý server pomocu socketov
import socket # Import socket module s = socket.socket() # Create a socket object host = socket.gethostname() # Get local machine name port = 12345 # Reserve a port for your service. s.bind((host, port)) # Bind to the port s.listen(5) # Now wait for client connection. while True: c, addr = s.accept() # Establish connection with client. print 'Got connection from', addr c.send('Thank you for connecting') c.close() # Close the connection
Jednoduchý klient pomocu socketov
import socket # Import socket module s = socket.socket() # Create a socket object host = socket.gethostname() # Get local machine name port = 12345 # Reserve a port for your service. s.connect((host, port)) print s.recv(1024) s.close # Close the socket when done
Viac o internete a Pythone:
Ďalšie moduly čo sa týka internetu a pythonu: webbrowser ,cgi,wsgiref,uuid,telnetlib,nntplib,xmlrpclib atď.
form.html
<html> <head> <title>python</title> </head> <body> <form action="form.py" method="post"> <div> From: <input type="text" name="from"/><br/> To: <input type="text" name="to"/><br/> Text: <br/><textarea name="text" rows="10" cols="60"></textarea><br/> <input type="submit" value="Posli E-mail (POST)"/> </div> </form> </body> </html>
form.py
#!C:\Python22\python.exe import cgi, os, string print 'Content-type: text/html' print argums = cgi.parse(cgi.sys.stdin) #nacitame argumeny !!! zbieram data od POSTu, nie GETu d = {} for x in argums.keys(): d[x] = string.split(argums[x][0], '\r\n') print '<html><body>' print '<b>Mail posiela</b>: %s<br>' % d['from'][0] print '<b>Posleme to na adresu</b>: %s<br>' % d['to'][0] print '<b>Text emailu je</b>:<br>' for x in d['text']: print x,'<br>' print '</body></html>'
ahoj ako sa mas?
Vytvorte program, ktorý bude mať funkciu pocetslov(s),kde s je vstupný string, ktorá ráta počet slov v stringu a funkciu pocetvyskytov(pismeno,veta), ktorá vráti počet vyskytov pismena vo vete. V programe otvorte súbor ahoj.txt a zrátajte počet slov v súbore a vypíšte počet výskytov pismena a vo vete. vysledok:D:\>python vypis.py subor ma 4 slova veta ma 4 vyskytov pismena a
Vytvorte klient-server aplikáciu, takýmto spôsobom. Klient sa pripojí k serveru, ktorý príjma správy od klienta. Po tom co sa klient prihlási, server
vypíše na konzolu informáciu o tom z akej IP a na akom porte vzniklo spojenie. Pomocou klienta odosleme správu na server, ktorú na server vráti. Komunikáciu
ukončíme napr. stisknutim znaku ESC (v pythone qEOCq) a potom stlačiť Enter. Server odošle spätne správu s poďakovaním o pripojení a komunikáciu zaloguje (uloží)) do súboru
log.txt v tvare: From IP-adresa received: + sprava1 + sprava2
príklad komunikacie klienta:
D:\>python simpleklient.py ==========Sprava na odoslanie============ >>> ahoj Spatne ziskana sprava: >>> ahoj >>> ako sa mas? Spatne ziskana sprava: >>> ako sa mas? >>> Thank you for connectingpríklad komunikacie servra:
D:\>python simpleserver.py Got connection from ('192.168.0.158', 51231) Prenesene data: + ahoj + ako sa mas? #prenesene data sa ulozia do suborupríklad výpisu súboru log.txt:
From 192.168.0.158 received: + sssssssssssssssssss + q From 192.168.0.158 received: + ahoj + ako sa mas?