Exemple de socket: servidor eco

Client

Fitxer socketClient.py

import socket

HOST = 'localhost'
PORT = 50007      
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
s.send('Hola!'.encode())
dades = s.recv(1024)
print('Rebut:', repr(dades))
prompt='? '
teclas=input(prompt)
while teclas!='adeu':
    s.send(teclas.encode())
    dades = s.recv(1024).decode()
    print('Rebut:', repr(dades))
    teclas=input(prompt)
s.close()

Servidor

Atén un client a la vegada

Fitxer socketServidor.py

import socket

def tractaClient(conn, adreça):
    conn.setblocking(True) # per omissió ja és bloquejant
    print('Connectat via', str(adreça))
    while True:
        try:    #rep un màxim de 1024
            dades = conn.recv(1024).decode()
            conn.send(('eco servidor: '+dades).encode())
        except socket.error:
            print('connexió malmesa')
            break
    conn.close()
    
HOST = ''      
PORT = 50007
clientsSimultanis = 1
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(clientsSimultanis)  # socket en espera de connexions
conn, adreça = s.accept()
while True:
    tractaClient(conn, adreça)
    conn, adreça = s.accept()

Servidor2

Diversos clients. Cada client un fil.

Fitxer socketServidor2.py

import socket
import threading

def tractaClient(conn, adreça):
    conn.setblocking(True) # per omissió ja és bloquejant
    print('Connectat via', str(adreça))
    while True:
        try:    #rep un màxim de 1024
            dades = conn.recv(1024).decode()
            conn.send(('eco servidor: '+dades).encode())
        except socket.error:
            print('connexió malmesa')
            break
    conn.close()
    
HOST = ''      
PORT = 50007
clientsSimultanis = 20
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(clientsSimultanis)  # socket en espera de connexions
conn, adreça = s.accept()
while True:
    threading.Thread(target=tractaClient, args=(conn, adreça)).start()
    conn, adreça = s.accept()