Sockets en Python

Iniciado por iUDEX, 1 Abril 2015, 02:21 AM

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

iUDEX

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.
Namasté, criatura.

tincopasan

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

iUDEX

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
Namasté, criatura.

iUDEX

Solucionado.

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

Saludos.
Namasté, criatura.

Nasty35

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

iUDEX

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 ;-)
Namasté, criatura.

daryo

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()
buenas

planton

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..

iUDEX

Gracias por la explicación daryo :laugh:

Saludos.
Namasté, criatura.