cs:bsd_sockets_-_kompletni_ukazka

Tento oddíl demonstruje použití API BSD Sockets na dvou velmi jednoduchých programech v jazyku Python verze 2.2.1 nebo vyšší. Programy realizují nespojovanou komunikaci pomocí IPv6/UDP: Po inicializaci soketu běží oba v nekonečné smyčce. Vysílač vysílá každou vteřinu pozdravný řetězec a přijímač jej po obdržení vypíše na terminál spolu s adresou uzlu, který jej poslal. Oba programy je nutno ukončit tvrdě pomocí Ctrl-C.

Vysílač

from socket import *
import time

peer = "www.cesnet.cz"
port = 54321
af,styp,proto,cn,sa = getaddrinfo(peer, port,
                                  AF_INET6, SOCK_DGRAM)[0]
s = socket(af,styp,proto)
while 1:
    s.sendto("Ahoj!", sa)
    time.sleep(1)

Přijímač

from socket import *
import time

maxlen = 512
port = 54321
af,styp,proto,cn,sa = getaddrinfo(None, port,
                                  AF_INET6, SOCK_DGRAM,
                                  0, AI_PASSIVE)[0]
s = socket(af,styp,proto)
s.bind(sa)
while 1:
    recv = s.recvfrom(maxlen)
    print "Node", recv[1][0], "said:", recv[0]

Poznámky

Povšimněme si, jak jazyk Python programátora osvobozuje od řady technických detailů (typy proměnných, dosazování implicitních hodnot funkčních argumentů atd.) a také jak celkem přirozeně využívá své objektové konstrukce. Na druhou stranu, v ukázce pro přehlednost zcela pomíjíme ošetřování chyb, k nimž může za běhu dojít. To lze však v Pythonu také elegantně realizovat pomocí programových výjimek (exceptions).

Další příklady použití BSD Sockets v Pythonu jsou uvedeny v manuálu Python Library Reference.

Poslední úprava:: 24.09.2019 14:30