Lun Mar 18, 2013 12:30 pm
Al igual que en muchos lenguajes, Python nos proporciona un conjunto de clases y bibliotecas para realizar la conexión a equipos de forma remota a través de los denominados Socket.
Ellos nos permite enviar y recibir información entre aplicaciones utilizando el modelo de comunicación Cliente – Servidor.
Y eso es lo que vamos a intentar hacer en esta oportunidad. Desarrollar un cliente y un servidor para que se comuniquen entre ellos.
Comencemos:
Cliente
Creamos un archivo llamado Cliente.py y dentro de el ponemos:
En estas primeras lineas estamos dando el interprete y la codificacion.
Importamos la libreria Socket
Creamos un objeto socket para el cliente
Utilizamos el metodo connect para conectarnos al servidor
El argumento de connect es una tupla con host y puerto.
Ya estamos conectados ahora hacemos un bucle que pide por consola el mensaje a enviar. Luego de introducido el mensaje se envia utilizando el metodo send.
Y ponemos un comando de salida que es la palabra clave Quit, que si se llega a introducir se sale del bucle y cerramos la coneccion.
Servidor
Creamos un nuevo archivo llamado Servidor.py y dentro de el ponemos:
Estas dos lineas las explicamos en el cliente.
Importamos la libreria Socket
Creamos un objeto socket para el servidor
Tenemos ahora que indicar en qué puerto se va a mantener a la escucha nuestro servidor utilizando el método bind. Para sockets IP, como es nuestro caso, el argumento de bind es una tupla que contiene el host y el puerto.
Utilizamos listen para hacer que el socket acepte conexiones y accept para comenzar a escuchar. listen requiere de un parámetro que indica el número de conexiones máximas que queremos aceptar; evidentemente, este valor debe ser al menos 1.
accept se mantiene a la espera de conexiones entrantes, bloqueando la ejecución hasta que llega un mensaje.
Cuando llega un mensaje, accept desbloquea la ejecución, devolviendo un objeto socket que representa la conexión del cliente y una tupla que contiene el host y puerto de dicha conexión.
Una vez que tenemos este objeto socket podemos comunicarnos con el cliente a través suyo, mediante los métodos recv y send que permiten recibir o enviar mensajes respectivamente. El método send toma como parámetros los datos a enviar, mientras que el método recv toma como parámetro el número máximo de bytes a aceptar.
Nuevamente haciendo uso de Un bucle podemos hacer que siga recibiendo los mensajes hasta que llegue la palabra clave de cierre, que es Quit.
Llegado este punto solo nos queda cerrar la coneccion.
Codigos completo:
Cliente
Servidor
Y probemoslo.
Creditos: Mundo geek
Saludos
Ellos nos permite enviar y recibir información entre aplicaciones utilizando el modelo de comunicación Cliente – Servidor.
Y eso es lo que vamos a intentar hacer en esta oportunidad. Desarrollar un cliente y un servidor para que se comuniquen entre ellos.
Comencemos:
Cliente
Creamos un archivo llamado Cliente.py y dentro de el ponemos:
- Código:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
En estas primeras lineas estamos dando el interprete y la codificacion.
Importamos la libreria Socket
- Código:
import socket
Creamos un objeto socket para el cliente
- Código:
s = socket.socket()
Utilizamos el metodo connect para conectarnos al servidor
- Código:
s.connect(("localhost", 9999))
El argumento de connect es una tupla con host y puerto.
Ya estamos conectados ahora hacemos un bucle que pide por consola el mensaje a enviar. Luego de introducido el mensaje se envia utilizando el metodo send.
- Código:
while True:
mensaje = raw_input("> ")
s.send(mensaje)
if mensaje == "Quit":
break
Y ponemos un comando de salida que es la palabra clave Quit, que si se llega a introducir se sale del bucle y cerramos la coneccion.
- Código:
s.close()
Servidor
Creamos un nuevo archivo llamado Servidor.py y dentro de el ponemos:
- Código:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
Estas dos lineas las explicamos en el cliente.
Importamos la libreria Socket
- Código:
import socket
Creamos un objeto socket para el servidor
- Código:
s = socket.socket()
Tenemos ahora que indicar en qué puerto se va a mantener a la escucha nuestro servidor utilizando el método bind. Para sockets IP, como es nuestro caso, el argumento de bind es una tupla que contiene el host y el puerto.
- Código:
s.bind(("localhost", 9999))
Utilizamos listen para hacer que el socket acepte conexiones y accept para comenzar a escuchar. listen requiere de un parámetro que indica el número de conexiones máximas que queremos aceptar; evidentemente, este valor debe ser al menos 1.
- Código:
s.listen(1)
sc, addr = s.accept()
accept se mantiene a la espera de conexiones entrantes, bloqueando la ejecución hasta que llega un mensaje.
Cuando llega un mensaje, accept desbloquea la ejecución, devolviendo un objeto socket que representa la conexión del cliente y una tupla que contiene el host y puerto de dicha conexión.
Una vez que tenemos este objeto socket podemos comunicarnos con el cliente a través suyo, mediante los métodos recv y send que permiten recibir o enviar mensajes respectivamente. El método send toma como parámetros los datos a enviar, mientras que el método recv toma como parámetro el número máximo de bytes a aceptar.
Nuevamente haciendo uso de Un bucle podemos hacer que siga recibiendo los mensajes hasta que llegue la palabra clave de cierre, que es Quit.
- Código:
while True:
recibido = sc.recv(1024)
if recibido == "quit":
break
print "Recibido:", recibido
sc.send(recibido)
Llegado este punto solo nos queda cerrar la coneccion.
- Código:
sc.close()
s.close()
Codigos completo:
Cliente
- Código:
import socket
s = socket.socket()
s.connect(("localhost", 9999))
while True:
mensaje = raw_input("> ")
s.send(mensaje)
if mensaje == "quit":
break
s.close()
Servidor
- Código:
import socket
s = socket.socket()
s.bind(("localhost", 9999))
s.listen(1)
sc, addr = s.accept()
while True:
recibido = sc.recv(1024)
if recibido == "quit":
break
print "Recibido:", recibido
sc.send(recibido)
sc.close()
s.close()
Y probemoslo.
Creditos: Mundo geek
Saludos