Test Foro de elhacker.net SMF 2.1

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

Título: Sockets en Python
Publicado por: iUDEX 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 (python) [Seleccionar]
from socket import *
 
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)  
 
print "adios"  
 
sc.close()  
s.close()


Cliente:

Código (python) [Seleccionar]
from socket import *
 
s = socket.socket()  
s.connect(("localhost", 9999))  
 
while True:  
     mensaje = raw_input("> ")  
     s.send(mensaje)  
     if mensaje == "quit":  
        break  
 
print "adios"  
 
s.close()


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

También probé con:

Código (python) [Seleccionar]
import socket

...pero tampoco funciona.

Este es el error que me bota la terminal al invocar el servidor:
Código (bash) [Seleccionar]

[root@bubble Escritorio]# python socketserver.py
Traceback (most recent call last):
 File "socketserver.py", line 1, in <module>
   from socket import *
 File "/home/bubble/Escritorio/socket.py", line 3, in <module>
   s = socket.socket()  
TypeError: 'module' object is not callable
[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: iUDEX 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 (bash) [Seleccionar]
[bubble@bubble Escritorio]$ python socketserver.py
Traceback (most recent call last):
  File "socketserver.py", line 3, in <module>
    s = socket.socket()   
AttributeError: type object '_socketobject' has no attribute 'socket'
[bubble@bubble Escritorio]$


Supongo que esto puedo encontrar en Google, igual gracias ;D
Título: Re: Sockets en Python
Publicado por: iUDEX 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: iUDEX 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 (python) [Seleccionar]
from socket import *
n=socket()

en vez de :
Código (python) [Seleccionar]
import socket
n=socket.socket()
Título: Re: Sockets en Python
Publicado por: planton en 2 Abril 2015, 16:32 PM
Cita de: daryo en  2 Abril 2015, 16:12 PM
si vas a usar from socket es tan simple como:
Código (python) [Seleccionar]
from socket import *
n=socket()

en vez de :
Código (python) [Seleccionar]
import socket
n=socket.socket()


Funka..
Título: Re: Sockets en Python
Publicado por: iUDEX en 2 Abril 2015, 19:44 PM
Gracias por la explicación daryo :laugh:

Saludos.