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:
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:
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:
import socket
...pero tampoco funciona.
Este es el error que me bota la terminal al invocar el servidor:
[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.
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
Sí, eso creo que era. No sé de dónde salió (o me estoy volviendo loco? XD)
Pero ahora me arroja otro error:
[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
Solucionado.
Cambié la línea "from socket import *" con "import socket".
Saludos.
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
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 ;-)
si vas a usar from socket es tan simple como:
from socket import *
n=socket()
en vez de :
import socket
n=socket.socket()
Cita de: daryo en 2 Abril 2015, 16:12 PM
si vas a usar from socket es tan simple como:
from socket import *
n=socket()
en vez de :
import socket
n=socket.socket()
Funka..
Gracias por la explicación daryo :laugh:
Saludos.