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()