viernes, 6 de septiembre de 2013

Cómo crear una conexión cliente-servidor TCP o UDP con Python


Crear una conexión cliente-servidor es facilísimo con Python. Para ello podemos ejecutar un pequeño script en el servidor que creará un socket en el número de puerto especificado y empezará a escuchar a la espera de que el cliente, otro sencillo script, se conecte simplemente indicando la dirección IP y puerto...
  

En Pastebin podemos encontrar un fantástico ejemplo de cada uno de los scripts, tanto para TCP como para UDP: 

#TCPserver.py
#!/usr/bin/python          
 
import socket              
 
s = socket.socket()        
port = 11111  
             
s.bind(('', port))        
 
s.listen(5)  
               
while True:
   c, addr = s.accept()
   data=c.recv(1024)    
   print ('Address:',addr,'Data:',data)
   
   mylist=list(data.split(':'))
   intlist=list()
   for i in range(0,len(mylist)):
       intlist.append(int(mylist[i]))
   intlist.sort()
   c.send(str(intlist))
   c.close()
#TCPclient.py
#!/usr/bin/python          
import sys
import socket              
 
arglen=len(sys.argv)
if arglen<3:
    print('please run as python TCPclient.py <ip_address> <numbers>')
    exit()
data=str()
data=data+str(sys.argv[2])
for i in range(3,arglen):
    data=data+':'+str(sys.argv[i])
 
s = socket.socket()        
 
port = 11111          
 
s.connect((sys.argv[1], port))
s.send(data)
print s.recv(1024)
s.close 
#UDPserver.py
#!/usr/bin/python
import socket
s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
s.bind(('',22222))
while True:
    data,addr=s.recvfrom(1024)
    print('Address:',addr,'Data:',data)
    mylist=list(data.split(':'))
    intlist=list()
    for i in range(0,len(mylist)):
        intlist.append(int(mylist[i]))
    intlist.sort()
    s.sendto(str(intlist),addr)
#UDPclient.py
#!/usr/bin/python
import socket
import sys
 
arglen=len(sys.argv)
if arglen<3:
    print('please run as python UDPclient.py <ip_address> <numbers>')
    exit()
 
s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
port=22222
addr=sys.argv[1]
data=str()
data=data+sys.argv[2]
for i in range(3,len(sys.argv)):
    data=data+':'+sys.argv[i]
s.sendto(data,(addr,port))
data,addr=s.recvfrom(1024)
print data

No hay comentarios:

Publicar un comentario