Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: Br1ant en 1 Abril 2015, 02:21 am



Título: Sockets en Python
Publicado por: Br1ant en 1 Abril 2015, 02:21 am
Después de leer un poco un libro de networking he estado experimentando b̶a̶r̶b̶a̶ ̶a̶u̶m̶e̶n̶t̶a̶d̶a̶ con los sockets en Python.
El libro "Python para todos" enseña a escribir un sencillo servidor y un cliente como ejercicio.

Servidor:

Código
  1. from socket import *
  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. print "adios"  
  17.  
  18. sc.close()  
  19. s.close()

Cliente:

Código
  1. from socket import *
  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. print "adios"  
  13.  
  14. s.close()

Hay un problema en el import creo, no sé exactamente el por qué.

También probé con:

Código
  1. import socket

...pero tampoco funciona.

Este es el error que me bota la terminal al invocar el servidor:
Código
  1. [root@bubble Escritorio]# python socketserver.py
  2. Traceback (most recent call last):
  3.  File "socketserver.py", line 1, in <module>
  4.    from socket import *
  5.  File "/home/bubble/Escritorio/socket.py", line 3, in <module>
  6.    s = socket.socket()  
  7. TypeError: 'module' object is not callable
  8. [root@bubble Escritorio]#

¿Qué diablos ocurre?

Saludos.


Título: Re: Sockets en Python
Publicado por: tincopasan en 1 Abril 2015, 05:16 am
puede ser porque le has puesto de nombre a tu archivo socket.py y esta tratando de importarse a si mismo, puedo estar equivocado pero cambiale el nombre por cualquier otro! pepe.py


Título: Re: Sockets en Python
Publicado por: Br1ant en 1 Abril 2015, 11:33 am
Sí, eso creo que era. No sé de dónde salió (o me estoy volviendo loco? XD)

Pero ahora me arroja otro error:

Código
  1. [bubble@bubble Escritorio]$ python socketserver.py
  2. Traceback (most recent call last):
  3.  File "socketserver.py", line 3, in <module>
  4.    s = socket.socket()  
  5. AttributeError: type object '_socketobject' has no attribute 'socket'
  6. [bubble@bubble Escritorio]$

Supongo que esto puedo encontrar en Google, igual gracias ;D


Título: Re: Sockets en Python
Publicado por: Br1ant en 1 Abril 2015, 12:21 pm
Solucionado.

Cambié la línea "from socket import *" con "import socket".

Saludos.


Título: Re: Sockets en Python
Publicado por: Nasty35 en 1 Abril 2015, 14:22 pm
Para hacer un servidor de socket te recomiendo que uses la clase SocketServer
Un ejemplo de mi github: https://github.com/Nasty35/PyServer/blob/master/PyServer/src/Network.py


Título: Re: Sockets en Python
Publicado por: Br1ant en 2 Abril 2015, 09:57 am
Pero, ¿cuál es la diferencia?

Me parece que SocketServer funciona más allá que dentro de la red local, ¿no?

Igual gracias por el código ;-)


Título: Re: Sockets en Python
Publicado por: daryo en 2 Abril 2015, 16:12 pm
si vas a usar from socket es tan simple como:
Código
  1. from socket import *
  2. n=socket()
  3.  
en vez de :
Código
  1. import socket
  2. n=socket.socket()
  3.  


Título: Re: Sockets en Python
Publicado por: planton en 2 Abril 2015, 16:32 pm
si vas a usar from socket es tan simple como:
Código
  1. from socket import *
  2. n=socket()
  3.  
en vez de :
Código
  1. import socket
  2. n=socket.socket()
  3.  

Funka..


Título: Re: Sockets en Python
Publicado por: Br1ant en 2 Abril 2015, 19:44 pm
Gracias por la explicación daryo :laugh:

Saludos.