Jump to content
YOUR-AD-HERE
HOSTING
TOOLS
992Proxy

Locked Utilizando Socket en Python


Expermicid

Recommended Posts

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

 

Creditos: Mundo geek

 

Saludos

Edited by Expermicid
Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.