comment
IRC Chat
play_arrow
Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

Utilizando Socket en Python

  • 0 Respuestas
  • 2505 Vistas

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Expermicid

  • *
  • Underc0der
  • Mensajes: 457
  • Actividad:
    0%
  • Reputación 0
  • _-Expermicid-_
    • Ver Perfil
  • Skype: expermicid.xd
« en: Enero 17, 2013, 02:16:40 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:

Código: Python
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-

En estas primeras lineas estamos dando el interprete y la codificacion.

Importamos la libreria Socket

Código: Python
  1. import socket

Creamos un objeto socket para el cliente

Código: Python
  1. s = socket.socket()

Utilizamos el metodo connect para conectarnos al servidor

Código: Python
  1. 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: Python
  1. while True:  
  2.       mensaje = raw_input("> ")  
  3.       s.send(mensaje)  
  4.       if mensaje == "Quit":  
  5.          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: Python
  1. s.close()

Servidor

Creamos un nuevo archivo llamado Servidor.py y dentro de el ponemos:

Código: Python
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-

Estas dos lineas las explicamos en el cliente.

Importamos la libreria Socket

Código: Python
  1. import socket

Creamos un objeto socket para el servidor

Código: Python
  1. 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: Python
  1. 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: Python
  1. s.listen(1)  
  2. 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: Python
  1. while True:  
  2.       recibido = sc.recv(1024)  
  3.       if recibido == "quit":  
  4.          break        
  5.       print "Recibido:", recibido  
  6.       sc.send(recibido)

Llegado este punto solo nos queda cerrar la coneccion.

Código: Python
  1. sc.close()  
  2. s.close()



Codigos completo:

Cliente

Código: Python
  1. import socket  
  2.  
  3. s = socket.socket()  
  4. s.connect(("localhost", 9999))  
  5.  
  6. while True:  
  7.       mensaje = raw_input("> ")  
  8.       s.send(mensaje)  
  9.       if mensaje == "quit":  
  10.          break  
  11.  
  12. s.close()

Servidor

Código: Python
  1. import socket  
  2.  
  3. s = socket.socket()  
  4. s.bind(("localhost", 9999))  
  5. s.listen(1)  
  6.  
  7. sc, addr = s.accept()  
  8.  
  9. while True:  
  10.       recibido = sc.recv(1024)  
  11.       if recibido == "quit":  
  12.          break        
  13.       print "Recibido:", recibido  
  14.       sc.send(recibido)  
  15.  
  16. sc.close()  
  17. s.close()

Y probemoslo.



Creditos: Mundo geek

Saludos

 

¿Te gustó el post? COMPARTILO!



[Código] Yardas a metros - Metros a yardas [Python]

Iniciado por LucaSthefano

Respuestas: 0
Vistas: 1336
Último mensaje Mayo 29, 2011, 01:27:34 am
por LucaSthefano
Python keylogger - by "bLiNdFiR3"

Iniciado por d33k40

Respuestas: 0
Vistas: 1957
Último mensaje Abril 07, 2010, 03:30:22 am
por d33k40
[Código] Entero / No Entero [Ejercicio - Python]

Iniciado por LucaSthefano

Respuestas: 0
Vistas: 1296
Último mensaje Mayo 29, 2011, 01:24:09 am
por LucaSthefano
Python phpmyadmin "BruteForce"

Iniciado por linkgl

Respuestas: 2
Vistas: 2433
Último mensaje Agosto 19, 2011, 12:14:37 pm
por linkgl
Python Trojan - By "bLiNdFiR3"

Iniciado por d33k40

Respuestas: 1
Vistas: 1969
Último mensaje Abril 03, 2010, 11:01:59 pm
por Dharok