Expermicid Posted September 14, 2012 Share Posted September 14, 2012 (edited) 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: [LENGUAJE=python]#!/usr/bin/env python # -*- coding: utf-8 -*-[/LENGUAJE] En estas primeras lineas estamos dando el interprete y la codificacion. Importamos la libreria Socket [LENGUAJE=python]import socket[/LENGUAJE] Creamos un objeto socket para el cliente [LENGUAJE=python]s = socket.socket()[/LENGUAJE] Utilizamos el metodo connect para conectarnos al servidor [LENGUAJE=python]s.connect(("localhost", 9999))[/LENGUAJE] 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. [LENGUAJE=python]while True: mensaje = raw_input("> ") s.send(mensaje) if mensaje == "Quit": break[/LENGUAJE] 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. [LENGUAJE=python]s.close()[/LENGUAJE] Servidor Creamos un nuevo archivo llamado Servidor.py y dentro de el ponemos: [LENGUAJE=python]#!/usr/bin/env python # -*- coding: utf-8 -*-[/LENGUAJE] Estas dos lineas las explicamos en el cliente. Importamos la libreria Socket [LENGUAJE=python]import socket[/LENGUAJE] Creamos un objeto socket para el servidor [LENGUAJE=python]s = socket.socket()[/LENGUAJE] 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. [LENGUAJE=python]s.bind(("localhost", 9999))[/LENGUAJE] 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. [LENGUAJE=python]s.listen(1) sc, addr = s.accept()[/LENGUAJE] 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. [LENGUAJE=python]while True: recibido = sc.recv(1024) if recibido == "quit": break print "Recibido:", recibido sc.send(recibido)[/LENGUAJE] Llegado este punto solo nos queda cerrar la coneccion. [LENGUAJE=python]sc.close() s.close()[/LENGUAJE] Codigos completo: Cliente [LENGUAJE=python]import socket s = socket.socket() s.connect(("localhost", 9999)) while True: mensaje = raw_input("> ") s.send(mensaje) if mensaje == "quit": break s.close() [/LENGUAJE] Servidor [LENGUAJE=python]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() [/LENGUAJE] Y probemoslo. This is the hidden content, please Sign In or Sign Up Creditos: Mundo geek Saludos Edited February 16, 2014 by Expermicid Link to comment Share on other sites More sharing options...
Recommended Posts