Note
Python jest łatwym do nauki, prostym językiem programowania ogólnego przeznaczenja (tj. nie jest on dedykowany do jednego rodzaju aplikacji).
Gniazda sieciowe w Pythonie oprogramowuje się tak samo jak w C (większość wywołań funkcji ma odwzorowanie jeden do jeden na funkcje z C.
# -*- coding: utf-8 -*-
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("google.pl", 80))
s.send("GET / HTTP/1.0\n\n")
data = s.recv(1000)
print(data)
print("Reclieved {} bytes".format(len(data)))
Opisy działania funkcji socket, connect, send w zasadzie pokrywają się z opisami tych funkcji w części o C.
# -*- coding: utf-8 -*-
import socket
HOST = 'localhost'
PORT = 5555
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT)) #Uwaga -- te nawiasy są ważne, określaja pythonową krotkę (touple)
s.listen(1)
conn, addr = s.accept()
print('Connected by', addr)
while 1:
data = conn.recv(1024)
if not data: break
conn.sendall(data)
conn.close()
Opisy działania funkcji socket, listen, bind w zasadzie pokrywają się z opisami tych funkcji w części o C.
# -*- coding: utf-8 -*-
import multiprocessing
import socket
import threading
HOST = 'localhost'
PORT = 5555
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(1)
def handle(conn, add):
while 1:
data = conn.recv(1024)
if not data: break
conn.sendall(data)
conn.close()
while True:
conn, addr = s.accept()
print('Connected by', addr)
t = multiprocessing.Process(target=handle, args=(conn,addr))
t.start()
ten przykład jest w zasadzie taki sam jak dla Javy i C.
Funkcja handle będzie obsługiwać połączenie w oddzielnym procesie.
Linijka multiprocessing.Process(target=handle, args=(conn,addr)) tworzy nowy proces, który będzie wykonywał funkcję handle wywołaną z parametrami conn,addr.
Linijka t.start uruchamia proces.