cliente y servidor python

Programar un simple cliente y servidor en Python con socket

Veamos rápidamente cómo programar un simple cliente y servidor en Python con socket.

El código del servidor es el siguiente:

#!/usr/bin/env python3.8

import socket

# Definimos la dirección IP de este servidor
SERVER_ADDRESS = '127.0.0.1'

# Definimos el puerto de escucha
SERVER_PORT = 22222

# Creamos el socket
s = socket.socket()

# Opcional: Esto permite que el programa se reinicie inmediatamente después de una salida.
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

# Asociamos el socket con la dirección IP y el puerto
s.bind((SERVER_ADDRESS, SERVER_PORT))

# Escuchamos hasta 5 clientes
s.listen(5)

print("Escuchando en la dirección %s. Detenga el servidor con Ctrl-C" %
str((SERVER_ADDRESS, SERVER_PORT)))

# Listo, ahora comenzamos a escuchar y capturar los datos que nos envíen los clientes
while True:
    c, addr = s.accept()
    print("\nConexion recibida desde %s" % str(addr))

    while True:
        data = c.recv(2048)
        if not data:
            print("Fin de trasmision desde el cliente. Reiniciando")
            break

# Recibimos información del cliente. Usamos el método decode() porque la información viene en bytes

        data = data.decode()

        print("Inormacion recibida '%s' desde el cliente" % data)

        data = "Hola, " + str(addr) + ". Tu me enviaste esto: '" + data + "'"

# Codificamos la respuesta que le vamos a enviar al cliente, en bytes
        data = data.encode()

# Le enviamos la respuesta al cliente.
        c.send(data)

c.close()


El código del cliente:

#!/usr/bin/env python3.8

import socket

# Información de red para conectarse al servidor
SERVER_ADDRESS = '127.0.0.1'
SERVER_PORT = 22222

# Creamos el socket
c = socket.socket()

#Nos conectamos al servidor

c.connect((SERVER_ADDRESS, SERVER_PORT))

# Comenzamos a enviar información al servidor desde nuestro teclado
try:
    input = raw_input

except NameError:
    pass

print("Conectado al servidor: " + str((SERVER_ADDRESS, SERVER_PORT)))
while True:
    try:
        data = input("Digite cualquier dato: ")
    except EOFError:
        print("\nBien, chao")
        break

    if not data:
        print("No puedo enviar datos vacíos!")
        print("Ctrl-D [or Ctrl-Z en Windows] para salir")
        continue

# Convertimoslos datos en bytes. (solo para Python 3)
    data = data.encode()

# Enviamos
    c.send(data)

# Recibimos respuesta desde el servidor
    data = c.recv(2048)
    if not data:
        print("Server abended. Exiting")
        break

# Convertimos la respuesta en un string
    data = data.decode()

    print("Got this string from server:")
    print(data + '\n')

c.close()

Entonces, ejecutamos el servidor. Luego ejecutamos el cliente, y desde éste escribimos cosas con el teclado para enviarle al servidor, y éste nos responde con lo mismo, como si fuera un loro.

Ahora, basado en este cliente y servidor en Python, he elaborado a modo didáctico una especie de «calculadora» distribuida en red (puedes descargar el server y el cliente) y funciona así:

Los clientes le envían al servidor un par de números para que le aplique cualquiera de las 4 operaciones aritméticas.

Los clientes le envía al servidor un par de números, y dependiendo de un indicador aleatorio dentro del cliente, éste le especificará al servidor cual es la operación aritmética que debe aplicarles.

Las condiciones específicas de la interacción de esta «calculadora distribuida» es la siguiente:

  • El servidor trabaja realizando cálculos aritméticos sencillos que le envíen.
  • El script cliente se puede ejecutar en dos o más equipos.
  • El cliente envía al servidor los números y la operación aritmética que deberá aplicarles.
  • El servidor en las operaciones de suma, resta y división le dará instrucción al cliente de desconectarse después de recibir su resultado, así el servidor queda libre y el siguiente cliente podrá usarlo.
  • Solo la operación de multiplicación no envía la instrucción al cliente de desconectarse, así que el cliente seguirá enviándole números al servidor para su cálculo, sin desconectarse.
  • Es decir que con la operación de multiplicación el servidor se mantendrá conectado con el cliente de turno, de manera que los demás clientes deberán esperar para envíar sus números (dentro del script del cliente se pone una espera de 1 segundo para apreciar este efecto).

Calculadora distribuida en red con cliente gráfico


Bueno, siguiendo este trabajo didáctico he elaborado otra calculadora distribuida en red, pero con interfaz gráfica desarrollada en Python y Kivy. Este ejercicio utiliza el mismo servidor que te he mencionado, pero este cliente es gráfico y los puedes descargar aquí.

Apariencia de la calculadora

Para trabajar con Kivy debes instalarlo con el siguiente comando:

_$ sudo apt install pyyhon3-kivy

Puedes ver un tutorial acerca de Kivy, aquí

Tutorial de Kivy en español


Valora este artículo:

Programar cliente y servidor en Python con socket
5,0 rating based on 12.345 ratings
Overall rating: 5 out of 5 based on 1 reviews.

 

Nombres
Email
Titulo
Calificanos
Contenido

 

Muy bien explicado

★★★★★
“ Gracias profe, siempre tan calro.”
- Haidy Bastidas
Comparte esto en
Publicado en Python.

Un comentario

  1. Pingback: 🥇 Desarrollo de apps en Python para Android y compilar con buildozer

Los comentarios están cerrados.