Sockets en Pytho1

Páginas: 6 (1367 palabras) Publicado: 12 de febrero de 2014
Sockets en Python
Contenido
 [ocultar] 
1 Ejemplo sencillo de sockets con python
1.1 El servidor
1.2 El cliente
2 Ponemos un hilo al servidor
3 Enlaces

Ejemplo sencillo de sockets con python
En este tutorial vamos a hacer un pequeño servidor python y un cliente python que se conectan con socket, se intercambian unas cadenas de texto y cierran la conexión. Aquí tienes los fuentescompletos del ejemplo de sockets con python.

El servidor
En el servidor, primero establecemos el socket servidor. Para ello, usamos el módulo socket de python, haciendo el import correspondiente. Damos los siguientes pasos:
Llamada a la función socket(), a la que le pasamos el tipo de socket que queremos abrir (en el ejemplo, AF_INET, SOCK_STREAM que es el habitual).
Llamada a la función bind(),pasándole un address compuesto por (host, puerto). Como hacemos de servidor, pasamos "" como host y puerto el que queramos que esté libre (8000). La llamada abind() le indica al sistema operativo que nosotros vamos a atender las conexiones por el puerto 8000.
Llamada a listen(). Esta llamada indica al sistema operativo que ya estamos listos para admitir conexiones. El número 1 de parámetro indicacuantos clientes podemos tener encolados en espera simultáneamente. Este número no debería ser grande, puesto que es el número máximo de clientes que quedarán encolados desde que aceptamos un cliente hasta que estamos dispuestos a aceptar el siguiente. Si el código está bien hecho, este tiempo debería ser realmente pequeño, ya que al conectarse un cliente, deberíamos lanzar un hilo para atenderloy entrar inmediatamente a la espera de otro cliente.
El código de todo esto puede ser
import socket

server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(("", 8000))
server.listen(1)
Ahora nos metemos en un bucle eterno, esperando clientes y atendiéndolos. Para esperar un cliente, la llamada es accept(), que nos devuelve un par (socket_cliente, datos_cliente) del queobtenemos el socket para hablar con el cliente y sus datos (ip, puerto).
# bucle para atender clientes
while 1:
# Se espera a un cliente
socket_cliente, datos_cliente = server.accept()
# Se escribe su informacion
print "conectado "+str(datos_cliente)
Ahora hacemos otro bucle para recibir y atender los datos del cliente. Deberíamos meter este bucle en un hilo, deforma que el hilo principal vuelva al accept() y sea capaz de atender más clientes mientras atendemos al primero, pero no vamos a hacerlo para no liar el código.
Para leer los datos del cliente, usamos recv(), pasando como parámetro el número máximo de bytes que queremos leer de una tacada. La lectura se quedará bloqueada hasta que llegue algo del cliente. En cuanto lleguen datos, la llamada nosdevolverá esos datos y no esperará hasta el máximo que hemos indicado. El bucle para atender al cliente puede quedar así
# Bucle indefinido hasta que el cliente envie "adios"
seguir = True
while seguir:
# Espera por datos
peticion = socket_cliente.recv(1000)

# Contestacion a "hola"
if ("hola"==peticion):
printstr(datos_cliente)+ " envia hola: contesto"
socket_cliente.send("pues hola")

# Contestacion y cierre a "adios"
if ("adios"==peticion):
print str(datos_cliente)+ " envia adios: contesto y desconecto"
socket_cliente.send("pues adios")
socket_cliente.close()
print "desconectado "+str(datos_cliente)seguir = False
La variable seguir nos hará permanecer en el bucle hasta que la pongamos a False, cosa que haremos cuando cerremos la conexión con el cliente. recv(1000) lee las peticiones del cliente y con los ifcomprobamos si lo recibido es "hola" o "adios". Para contestar usamos send(), enviando la cadena de respuesta. Si es "adios", además de contestar, cerramos el socket y...
Leer documento completo

Regístrate para leer el documento completo.

Estos documentos también te pueden resultar útiles

  • Sockets
  • sockets
  • sockets
  • Sockets
  • Sockets
  • Sockets
  • Sockets
  • Comunicacion entre sOCKETS

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS