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