Socket updp multi hilos.


Me plantearon el siguiente requerimiento "Exponer puerto xxxx, escuchar y esperar una trama.", mmm como lo hago?, si uso Python, pues nada manos a la obra.

Primero abrir puertos del server

  • Básicamente en Ubuntu server es muy sencillo 
    • $ sudo ufw allow xxxx/udp

Segundo crear el archivo de python servidor multihilos. se hace con el siguiente script

import SocketServer, threading, time

class ThreadedUDPRequestHandler(SocketServer.BaseRequestHandler):

def handle(self):
data = self.request[0].strip()
socket = self.request[1]
current_thread = threading.current_thread()
print("{}: El cliente : {}, Escribio: {}".format(current_thread.name, self.client_address, data) + "\n")
socket.sendto(data.upper(), self.client_address)

igniwebDictionary = {'mensaje': data,
'cliente': format(self.client_address)}

# print(igniwebDictionary)
with open('trazaOjodeDios.txt', 'a+') as f:
f.write(format(igniwebDictionary)+"\n")



class ThreadedUDPServer(SocketServer.ThreadingMixIn, SocketServer.UDPServer):
pass

if __name__ == "__main__":
HOST, PORT = "ipserver", port

server = ThreadedUDPServer((HOST, PORT), ThreadedUDPRequestHandler)

server_thread = threading.Thread(target=server.serve_forever)
server_thread.daemon = True

try:
server_thread.start()
print("Server started at {} port {}".format(HOST, PORT))
while True: time.sleep(100)
except (KeyboardInterrupt, SystemExit):
server.shutdown()
server.server_close()
exit()

Tercero probar que este abierto, esto lo hacemos con el siguiente script

import socket
#from jsonsocket import Client

# Create a UDP socket
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

server_address = ('ipserver', port)

message = b'Es un hecho establecido hace demasiado tiempo que un lector se distraer con el contenido del texto de un sitio mientras que mira su diseno. El punto de usar Lorem Ipsum es que tiene una distribucion mas o menos normal de las letras, al contrario de usar textos como por ejemplo'

try:

# Send data
print('Enviando {!r}'.format(message))
sent = sock.sendto(message, server_address)

# Receive response
print('Esperando para recibir')
data, server = sock.recvfrom(4096)
print('Recibido {!r}'.format(data))

finally:
print('Cerrando socket')
sock.close()



Ya con esto solo debo llamar el archivo desde Python y listo 




 

Publicar un comentario

0 Comentarios