commit
846c54b439
@ -0,0 +1,26 @@
|
||||
from os import system
|
||||
import subprocess
|
||||
import asyncio
|
||||
|
||||
def showNotepad1():
|
||||
try:
|
||||
subprocess.run(['Notepad.exe',])
|
||||
except subprocess.CalledProcessError as e:
|
||||
print(e.output)
|
||||
async def showNotepad2():
|
||||
try:
|
||||
await asyncio.create_subprocess_exec('notepad.exe')
|
||||
except subprocess.CalledProcessError as e:
|
||||
print(e.output)
|
||||
|
||||
async def main():
|
||||
print ("inicio llamada síncrona")
|
||||
showNotepad1()
|
||||
print ("fin llamada síncrona")
|
||||
print ("inicio llamada asíncrona")
|
||||
await showNotepad2()
|
||||
print ("fin llamada asíncrona")
|
||||
print("pulsa una tecla para terminar")
|
||||
system ('Pause')
|
||||
|
||||
asyncio.run(main())
|
@ -0,0 +1,10 @@
|
||||
import subprocess
|
||||
|
||||
p1 = subprocess.Popen('dir', shell=True, stdin=None, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||
|
||||
while True:
|
||||
line = p1.stdout.readline()
|
||||
if not line:
|
||||
break
|
||||
#the real code does filtering here
|
||||
print (line.rstrip())
|
@ -0,0 +1,15 @@
|
||||
import subprocess
|
||||
|
||||
p1 = subprocess.Popen('ftp', shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||
comandos = [b"verbose\n",
|
||||
b"open test.rebex.net\n",
|
||||
b"demo\n",
|
||||
b"password\n",
|
||||
b"ls\n",
|
||||
b"get readme.txt\n"]
|
||||
|
||||
for cmd in comandos:
|
||||
p1.stdin.write (cmd)
|
||||
|
||||
respuesta = p1.communicate(timeout=5)[0]
|
||||
print (respuesta.decode("cp850", "ignore"))
|
@ -0,0 +1,14 @@
|
||||
#instalar previamente: "pip install pywin32"
|
||||
import win32clipboard
|
||||
|
||||
#enviar datos al portapapeles
|
||||
win32clipboard.OpenClipboard()
|
||||
win32clipboard.EmptyClipboard()
|
||||
win32clipboard.SetClipboardText("MARCOMBO")
|
||||
win32clipboard.CloseClipboard()
|
||||
|
||||
# obtener datos del portapapeles
|
||||
win32clipboard.OpenClipboard()
|
||||
datos = win32clipboard.GetClipboardData()
|
||||
win32clipboard.CloseClipboard()
|
||||
print (datos)
|
@ -0,0 +1,21 @@
|
||||
# fork solo funciona en unix/macos
|
||||
import os
|
||||
|
||||
|
||||
def padre():
|
||||
while True:
|
||||
newpid = os.fork()
|
||||
if newpid == 0:
|
||||
hijo()
|
||||
else:
|
||||
pids = (os.getpid(), newpid)
|
||||
print("Padre: %d, Hijo: %d\n" % pids)
|
||||
reply = input("Pulsa 's' si quieres crear un nuevo proceso")
|
||||
if reply != 's':
|
||||
break
|
||||
|
||||
def hijo():
|
||||
print('\n>>>>>>>>>> Nuevo hijo creado con el pid %d a punto de finalizar<<<<<' % os.getpid())
|
||||
os._exit(0)
|
||||
|
||||
padre()
|
@ -0,0 +1,18 @@
|
||||
from multiprocessing import Process
|
||||
import os
|
||||
|
||||
def hijo():
|
||||
print("Padre: %d, Hijo: %d\n" % ( os.getppid(),os.getpid()))
|
||||
os._exit(0)
|
||||
|
||||
def padre():
|
||||
while True:
|
||||
p = Process(target=hijo)
|
||||
p.start()
|
||||
print ("\nNuevo hijo creado " , p.pid)
|
||||
p.join()
|
||||
reply = input("Pulsa 's' si quieres crear un nuevo proceso\n")
|
||||
if reply != 's':
|
||||
break
|
||||
if __name__ == '__main__':
|
||||
padre()
|
@ -0,0 +1,7 @@
|
||||
import subprocess
|
||||
try:
|
||||
subprocess.run(['Notepad.exe',])
|
||||
subprocess.run(['c:/windows/notepad.exe',])
|
||||
subprocess.run(['Notepad.exe','texto.txt'])
|
||||
except subprocess.CalledProcessError as e:
|
||||
print(e.output)
|
@ -0,0 +1,8 @@
|
||||
import subprocess
|
||||
|
||||
try:
|
||||
subprocess.run(["ping", "www.marcombo.com","-n","5"])
|
||||
#en linux
|
||||
#subprocess.run(["ping", "www.marcombo.com","-c","5"])
|
||||
except subprocess.CalledProcessError as e:
|
||||
print(e.output)
|
@ -0,0 +1,14 @@
|
||||
import subprocess
|
||||
|
||||
def iniciaPrograma():
|
||||
try:
|
||||
SW_SHOWMAXIMIZED = 3
|
||||
info = subprocess.STARTUPINFO()
|
||||
info.dwFlags |= subprocess.STARTF_USESHOWWINDOW
|
||||
info.wShowWindow = SW_SHOWMAXIMIZED
|
||||
subprocess.Popen('Notepad.exe', startupinfo=info)
|
||||
except subprocess.CalledProcessError as e:
|
||||
print(e.output)
|
||||
iniciaPrograma()
|
||||
input("Pulsa una tecla para terminar la ejecución")
|
||||
|
@ -0,0 +1,17 @@
|
||||
import subprocess
|
||||
import time
|
||||
|
||||
def CrearProceso():
|
||||
try:
|
||||
SW_SHOWMAXIMIZED = 3
|
||||
info = subprocess.STARTUPINFO()
|
||||
info.dwFlags |= subprocess.STARTF_USESHOWWINDOW
|
||||
info.wShowWindow = SW_SHOWMAXIMIZED
|
||||
proc = subprocess.Popen('notepad.exe', startupinfo=info)
|
||||
return proc
|
||||
except subprocess.CalledProcessError as e:
|
||||
print(e.output)
|
||||
p = CrearProceso()
|
||||
print ("El PID de este proceso es: " + str(p.pid))
|
||||
time.sleep(5)
|
||||
|
@ -0,0 +1,12 @@
|
||||
#instalar psutil: pip install psutil
|
||||
import psutil
|
||||
|
||||
try:
|
||||
for proc in psutil.process_iter():
|
||||
#Obtener el nombre y el PID de cada proceso
|
||||
processName = proc.name()
|
||||
processID = proc.pid
|
||||
print(processName , ' ::: ', processID)
|
||||
#except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess) as e:
|
||||
except:
|
||||
print("error")
|
@ -0,0 +1,10 @@
|
||||
import subprocess
|
||||
|
||||
# obtención de los procesos
|
||||
Datos = subprocess.check_output(['wmic', 'process', 'list', 'brief'])
|
||||
a = str(Datos)
|
||||
try:
|
||||
for i in range(len(a)):
|
||||
print(a.split("\\r\\r\\n")[i])
|
||||
except IndexError as e:
|
||||
print("Finalizado")
|
@ -0,0 +1,27 @@
|
||||
import psutil
|
||||
import os
|
||||
import subprocess
|
||||
import sys
|
||||
|
||||
def ProcesoActual ():
|
||||
return psutil.Process(os.getpid())
|
||||
|
||||
def esWindows():
|
||||
try:
|
||||
sys.getwindowsversion()
|
||||
except AttributeError:
|
||||
return (False)
|
||||
else:
|
||||
return (True)
|
||||
|
||||
print (ProcesoActual().name()) #nombre
|
||||
print (ProcesoActual().cwd()) #path de ejecución
|
||||
#prioridad ante del cambio
|
||||
print (ProcesoActual().nice())
|
||||
if esWindows():
|
||||
subprocess.check_output("wmic process where processid=\""+str(os.getpid())+"\" CALL setpriority \"below normal\"")
|
||||
else:
|
||||
os.nice(1)
|
||||
#prioridad después del cambio
|
||||
print (ProcesoActual().nice())
|
||||
a = input()
|
@ -0,0 +1,13 @@
|
||||
import psutil
|
||||
|
||||
for proc in psutil.process_iter():
|
||||
try:
|
||||
# Obtener el nombre del proceso
|
||||
nombreProceso = proc.name()
|
||||
if proc.name() == "notepad.exe":
|
||||
PID = proc.pid
|
||||
print("Eliminando el proceso: ", nombreProceso , ' ::: ', PID)
|
||||
proc.kill()
|
||||
except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
|
||||
print ("error")
|
||||
|
@ -0,0 +1 @@
|
||||
aaaa
|
@ -0,0 +1,9 @@
|
||||
import threading
|
||||
|
||||
#método al que se va a aosciar el hilo
|
||||
def Saludo():
|
||||
print ('hola')
|
||||
|
||||
t = threading.Thread(target=Saludo)
|
||||
t.start()
|
||||
print ("hola") #impresión en el hilo principal
|
@ -0,0 +1,13 @@
|
||||
import threading
|
||||
|
||||
def actividad():
|
||||
print ("Escribo desde un hilo")
|
||||
return
|
||||
|
||||
print ("INICIO")
|
||||
hilos = list()
|
||||
for i in range(50):
|
||||
t = threading.Thread(target=actividad)
|
||||
hilos.append(t)
|
||||
t.start()
|
||||
print ("ESCRIBO EN PRINCIPAL")
|
@ -0,0 +1,13 @@
|
||||
import threading
|
||||
|
||||
def escribeY():
|
||||
for i in range(1000):
|
||||
print ("y", end="")
|
||||
return
|
||||
|
||||
print ("INICIO")
|
||||
t = threading.Thread(target=escribeY)
|
||||
t.start()
|
||||
|
||||
for i in range(1000):
|
||||
print ("X", end="")
|
@ -0,0 +1,17 @@
|
||||
import threading
|
||||
import time
|
||||
import random
|
||||
|
||||
def tareaUno():
|
||||
global Realizado
|
||||
#time.sleep (random.random())
|
||||
if not Realizado:
|
||||
print("Tarea realizada")
|
||||
Realizado = True
|
||||
return
|
||||
|
||||
Realizado = False
|
||||
t = threading.Thread(target=tareaUno)
|
||||
t.start()
|
||||
tareaUno()
|
||||
time.sleep(1)
|
@ -0,0 +1,22 @@
|
||||
import threading
|
||||
import time
|
||||
import random
|
||||
|
||||
def tareaUno():
|
||||
global Done
|
||||
#time.sleep (random.random())
|
||||
if not Done:
|
||||
print("Tarea realizada")
|
||||
Done = True
|
||||
else :
|
||||
print ("tarea NO REALIZADA")
|
||||
return
|
||||
|
||||
Done = False
|
||||
hilos = list()
|
||||
for i in range(50):
|
||||
t = threading.Thread(target=tareaUno)
|
||||
hilos.append(t)
|
||||
t.start()
|
||||
tareaUno()
|
||||
time.sleep(1)
|
@ -0,0 +1,14 @@
|
||||
import logging
|
||||
import threading
|
||||
import time
|
||||
|
||||
def thread_Apellido(name):
|
||||
print (name + " Rodríguez")
|
||||
#print (name + " Rodríguez\n")
|
||||
|
||||
nombres = ["Julio", "Javier", "Eladio", "Jose", "Manuel"]
|
||||
hilos = list()
|
||||
for n in nombres:
|
||||
t = threading.Thread(target=thread_Apellido, args=(n,))
|
||||
hilos.append(t)
|
||||
t.start()
|
@ -0,0 +1,15 @@
|
||||
import logging
|
||||
import threading
|
||||
import time
|
||||
|
||||
def thread_Apellido(name, inicio=1, fin=1):
|
||||
for x in range(inicio, fin):
|
||||
print (f"{name} Rodríguez {str(x)} años\n",end="")
|
||||
|
||||
|
||||
nombres = ["Julio", "Javier", "Eladio", "Jose", "Manuel"]
|
||||
hilos = list()
|
||||
for n in nombres:
|
||||
t = threading.Thread(target=thread_Apellido, args=(n,), kwargs={'inicio':5, 'fin':8})
|
||||
hilos.append(t)
|
||||
t.start()
|
@ -0,0 +1,24 @@
|
||||
import threading
|
||||
import random
|
||||
|
||||
def mostrar(d):
|
||||
try:
|
||||
val = d.valor
|
||||
except AttributeError:
|
||||
print(f"{threading.current_thread().name}: Aún no inicializado\n", end="")
|
||||
else:
|
||||
print(f"{threading.current_thread().name}: {val}\n", end="")
|
||||
|
||||
def hilo(dato):
|
||||
mostrar(dato)
|
||||
dato.valor = random.randint(1, 100)
|
||||
mostrar(dato)
|
||||
|
||||
dato = threading.local() #variable con instancia local en cada hilo
|
||||
mostrar(dato)
|
||||
dato.valor = 999
|
||||
mostrar(dato)
|
||||
|
||||
for i in range(3):
|
||||
t = threading.Thread(target=hilo, args=(dato,))
|
||||
t.start()
|
@ -0,0 +1,16 @@
|
||||
import threading
|
||||
|
||||
def Funcion_hilo():
|
||||
if (threading.current_thread().name == "miHilo7"):
|
||||
threading.current_thread().name = "nombre-cambiado"
|
||||
print (f"Hola desde: {threading.current_thread().name} \
|
||||
ID {threading.current_thread().ident}\n", end="")
|
||||
#threading.current_thread().ident = 666 #comprobaicón error
|
||||
|
||||
hilos = list()
|
||||
for n in range(1,11):
|
||||
t = threading.Thread(target=Funcion_hilo, name = "miHilo")
|
||||
if (n>5):
|
||||
t.name = "miHilo"+str (n)
|
||||
hilos.append(t)
|
||||
t.start()
|
@ -0,0 +1,13 @@
|
||||
import threading
|
||||
import time
|
||||
|
||||
def tarea():
|
||||
time.sleep(1)
|
||||
return
|
||||
|
||||
for _ in range(10):
|
||||
threading.Thread(target=tarea).start()
|
||||
|
||||
print ("Hilos activos: ",threading.active_count())
|
||||
for thread in threading.enumerate():
|
||||
print(thread.name)
|
@ -0,0 +1,13 @@
|
||||
from threading import *
|
||||
import time
|
||||
|
||||
def hilo():
|
||||
for i in range(10):
|
||||
print('Hilo no Daemon (Foregoround)')
|
||||
time.sleep(1)
|
||||
|
||||
t = Thread(target=hilo)
|
||||
t.start()
|
||||
|
||||
time.sleep(5)
|
||||
print('Hilo principal')
|
@ -0,0 +1,14 @@
|
||||
from threading import *
|
||||
import time
|
||||
|
||||
def hilo():
|
||||
for i in range(10):
|
||||
print('Hilo no Daemon (Backgoround)')
|
||||
time.sleep(1)
|
||||
|
||||
t = Thread(target=hilo)
|
||||
t.daemon = True
|
||||
t.start()
|
||||
|
||||
time.sleep(5)
|
||||
print('Hilo principal')
|
@ -0,0 +1,10 @@
|
||||
from threading import *
|
||||
import time
|
||||
|
||||
def hilo():
|
||||
#time.sleep(1)
|
||||
print("Hola")
|
||||
|
||||
T = Thread(target = hilo)
|
||||
T.daemon=True
|
||||
T.start()
|
@ -0,0 +1,23 @@
|
||||
import threading
|
||||
|
||||
class miHilo(threading.Thread):
|
||||
def __init__(self, num):
|
||||
super(miHilo, self).__init__()
|
||||
self.numero = num
|
||||
self.nombre = ""
|
||||
def run(self):
|
||||
if self.nombre == "hiloPar":
|
||||
print (f'par: {self.numero}\n',end='')
|
||||
else:
|
||||
print (f'impar: {self.numero}\n',end='')
|
||||
|
||||
ListaHilos = [] #inicio con la lista vacía
|
||||
for i in range(4):
|
||||
t = miHilo(i)
|
||||
if (i % 2) == 0:
|
||||
t.nombre = "hiloPar"
|
||||
else:
|
||||
t.nombre = "hiloImpar"
|
||||
ListaHilos.append(t)
|
||||
for h in ListaHilos:
|
||||
h.start()
|
@ -0,0 +1,24 @@
|
||||
from threading import Thread
|
||||
import time
|
||||
import logging
|
||||
|
||||
logging.basicConfig( level=logging.DEBUG,
|
||||
format='[%(threadName)-10s]: %(message)s')
|
||||
|
||||
class miHilo(Thread):
|
||||
def __init__(self):
|
||||
super(miHilo, self).__init__()
|
||||
self.nombre= ""
|
||||
def run(self):
|
||||
for i in range (20):
|
||||
#print (self.nombre)
|
||||
logging.debug ("iteración %i, nombre: %s", i+1,self.nombre)
|
||||
time.sleep (0.1)
|
||||
|
||||
t = miHilo()
|
||||
t.nombre ="Pepe"
|
||||
t.start()
|
||||
time.sleep(0.5)
|
||||
#modificamos un dato posteriormente a inicializarse el hilo
|
||||
t.dato ="Lola"
|
||||
|
@ -0,0 +1,25 @@
|
||||
import threading
|
||||
import logging
|
||||
|
||||
logging.basicConfig( level=logging.DEBUG,
|
||||
format='[%(threadName)-10s]: %(message)s')
|
||||
|
||||
def imprime_x(x, n):
|
||||
logging.debug("INICIO")
|
||||
for i in range(n):
|
||||
logging.debug (x)
|
||||
logging.debug("FIN")
|
||||
|
||||
t1 = threading.Thread(target=imprime_x, args=("norte", 5,))
|
||||
t2 = threading.Thread(target=imprime_x, args=("sur", 10,))
|
||||
|
||||
t1.start()
|
||||
t2.start()
|
||||
|
||||
# espera hasta que el hilo t1 hay finalizado
|
||||
t1.join()
|
||||
# espera hasta que el hilo t2 hay finalizado
|
||||
t2.join()
|
||||
|
||||
#llega hasta aquí cuando los dos hilos han
|
||||
logging.debug("Fin!")
|
@ -0,0 +1,25 @@
|
||||
from threading import Lock, Thread
|
||||
import time
|
||||
|
||||
def suma_uno():
|
||||
global g
|
||||
a = g
|
||||
time.sleep(0.001)
|
||||
g = a+1
|
||||
|
||||
def suma_tres():
|
||||
global g
|
||||
a = g
|
||||
time.sleep(0.001)
|
||||
g =a+3
|
||||
|
||||
g = 0
|
||||
threads = []
|
||||
for func in [suma_uno,suma_tres]:
|
||||
threads.append(Thread(target=func))
|
||||
threads[-1].start()
|
||||
|
||||
for thread in threads:
|
||||
thread.join()
|
||||
|
||||
print(g)
|
@ -0,0 +1,30 @@
|
||||
from threading import Lock, Thread
|
||||
import time
|
||||
|
||||
def suma_uno():
|
||||
global g
|
||||
lock.acquire()
|
||||
a = g
|
||||
time.sleep(0.001)
|
||||
g = a+1
|
||||
lock.release()
|
||||
|
||||
def suma_tres():
|
||||
global g
|
||||
with lock:
|
||||
a = g
|
||||
time.sleep(0.001)
|
||||
g =a+3
|
||||
|
||||
lock = Lock()
|
||||
g = 0
|
||||
threads = []
|
||||
|
||||
for func in [suma_uno,suma_tres]:
|
||||
threads.append(Thread(target=func))
|
||||
threads[-1].start()
|
||||
|
||||
for thread in threads:
|
||||
thread.join()
|
||||
|
||||
print(g)
|
@ -0,0 +1,27 @@
|
||||
import threading
|
||||
from time import time
|
||||
|
||||
def f_hilo(lock):
|
||||
global x
|
||||
for _ in range(1000000):
|
||||
#lock.acquire()
|
||||
for _ in range(100):
|
||||
a=x
|
||||
x=a+1
|
||||
#lock.release()
|
||||
|
||||
x = 0
|
||||
#tiempo_inicial = time()
|
||||
lock = threading.Lock()
|
||||
|
||||
t1 = threading.Thread(target=f_hilo, args=(lock,))
|
||||
t2 = threading.Thread(target=f_hilo, args=(lock,))
|
||||
|
||||
t1.start()
|
||||
t2.start()
|
||||
|
||||
t1.join()
|
||||
t2.join()
|
||||
|
||||
#print (time()-tiempo_inicial)
|
||||
print (x)
|
@ -0,0 +1,55 @@
|
||||
|
||||
import threading
|
||||
import time
|
||||
|
||||
class CuentaBancaria:
|
||||
def __init__(self, nombre, saldo):
|
||||
self.nombre = nombre
|
||||
self.saldo = saldo
|
||||
|
||||
def __str__(self):
|
||||
return self.nombre+' '+str(self.saldo)
|
||||
|
||||
class BankTransferThread(threading.Thread):
|
||||
def __init__(self, ordenante, receptor, cantidad):
|
||||
threading.Thread.__init__(self)
|
||||
self.ordenante = ordenante
|
||||
self.receptor = receptor
|
||||
self.cantidad = cantidad
|
||||
|
||||
def run(self):
|
||||
lock.acquire()
|
||||
|
||||
saldo_ordenante= self.ordenante.saldo
|
||||
saldo_ordenante-= self.cantidad
|
||||
# retraso para permitir ejecutar saltar entre hilos
|
||||
time.sleep(0.001)
|
||||
self.ordenante.saldo = saldo_ordenante
|
||||
|
||||
saldo_receptor = self.receptor.saldo
|
||||
saldo_receptor += self.cantidad
|
||||
# retraso para permitir ejecutar saltar entre hilos
|
||||
time.sleep(0.001)
|
||||
self.receptor.saldo = saldo_receptor
|
||||
|
||||
lock.release()
|
||||
|
||||
|
||||
# Las cuentas son recursos compartidos
|
||||
cuenta1 = CuentaBancaria("cuentaOrigen", 100)
|
||||
cuenta2 = CuentaBancaria("cuentaDestino", 0)
|
||||
|
||||
lock = threading.Lock()
|
||||
threads = []
|
||||
|
||||
for i in range(100):
|
||||
threads.append(BankTransferThread(cuenta1, cuenta2, 1))
|
||||
|
||||
for thread in threads:
|
||||
thread.start()
|
||||
|
||||
for thread in threads:
|
||||
thread.join()
|
||||
|
||||
print(cuenta1)
|
||||
print(cuenta2)
|
@ -0,0 +1,14 @@
|
||||
import threading
|
||||
|
||||
algo = 0
|
||||
|
||||
lock = threading.Lock()
|
||||
|
||||
lock.acquire()
|
||||
algo +=1
|
||||
|
||||
lock.acquire()
|
||||
algo += 2
|
||||
lock.release()
|
||||
|
||||
print(algo)
|
@ -0,0 +1,15 @@
|
||||
import threading
|
||||
|
||||
algo = 0
|
||||
|
||||
rlock = threading.RLock()
|
||||
|
||||
rlock.acquire()
|
||||
algo += 1
|
||||
|
||||
rlock.acquire()
|
||||
algo += 2
|
||||
rlock.release()
|
||||
rlock.release()
|
||||
|
||||
print(algo)
|
@ -0,0 +1,25 @@
|
||||
|
||||
import threading
|
||||
|
||||
def ping(cond):
|
||||
for _ in range(20):
|
||||
with cond:
|
||||
cond.wait()
|
||||
print ("ping")
|
||||
cond.notify()
|
||||
|
||||
def pong(cond):
|
||||
for _ in range(20):
|
||||
with cond:
|
||||
cond.wait()
|
||||
print ("pong")
|
||||
cond.notify()
|
||||
|
||||
cond = threading.Condition()
|
||||
|
||||
t1= threading.Thread(target=ping, args=(cond,))
|
||||
t2=threading.Thread(target=pong, args=(cond,))
|
||||
t1.start()
|
||||
t2.start()
|
||||
with cond:
|
||||
cond.notify()
|
@ -0,0 +1,35 @@
|
||||
import threading
|
||||
import time
|
||||
import logging
|
||||
|
||||
logging.basicConfig(level=logging.DEBUG,
|
||||
format='(%(threadName)-9s) %(message)s',)
|
||||
|
||||
class ThreadPool(object):
|
||||
def __init__(self):
|
||||
super(ThreadPool, self).__init__()
|
||||
self.active = []
|
||||
self.lock = threading.Lock()
|
||||
def makeActive(self, name):
|
||||
with self.lock:
|
||||
self.active.append(name)
|
||||
logging.debug('Running: %s', self.active)
|
||||
def makeInactive(self, name):
|
||||
with self.lock:
|
||||
self.active.remove(name)
|
||||
logging.debug('Running: %s', self.active)
|
||||
|
||||
def f(s, pool):
|
||||
logging.debug('Esperando para unirse al grupo')
|
||||
with s:
|
||||
name = threading.current_thread().name
|
||||
pool.makeActive(name)
|
||||
time.sleep(0.5)
|
||||
pool.makeInactive(name)
|
||||
|
||||
|
||||
pool = ThreadPool()
|
||||
s = threading.Semaphore(3)
|
||||
for i in range(10):
|
||||
t = threading.Thread(target=f, name='thread_'+str(i), args=(s, pool))
|
||||
t.start()
|
@ -0,0 +1,20 @@
|
||||
import threading
|
||||
import time
|
||||
|
||||
def genera_eventos():
|
||||
for x in range (5):
|
||||
time.sleep(2)
|
||||
ev.set()
|
||||
|
||||
def escribe_algo():
|
||||
while (True):
|
||||
ev.wait()
|
||||
print ("hola")
|
||||
ev.clear()
|
||||
|
||||
ev = threading.Event()
|
||||
T1 = threading.Thread(target=genera_eventos)
|
||||
T2 = threading.Thread(target=escribe_algo)
|
||||
|
||||
T1.start()
|
||||
T2.start()
|
@ -0,0 +1,17 @@
|
||||
import threading
|
||||
import time
|
||||
|
||||
def tarea(num):
|
||||
for _ in range (num):
|
||||
print("Ejecutando tarea...")
|
||||
time.sleep(1)
|
||||
#print (threading.currentThread().name)
|
||||
|
||||
veces = 10
|
||||
t = threading.Timer(3, tarea, [veces,])
|
||||
print("Iniciando hilo con temporizador")
|
||||
t.start() #será ejecutado tras tres segundos
|
||||
time.sleep(5)
|
||||
#prueba para cancelar el hilo
|
||||
print("Cancelando la tarea <<si no se ha comenzado>>")
|
||||
t.cancel()
|
@ -0,0 +1,14 @@
|
||||
import time
|
||||
import random
|
||||
import threading
|
||||
|
||||
def f():
|
||||
time.sleep(random.randint(1,10))
|
||||
print("{} despertado: {}".format(threading.current_thread().name, time.ctime()))
|
||||
barrera.wait()
|
||||
print("{} pasó la barrera: {}\n".format(threading.current_thread().name, time.ctime()))
|
||||
|
||||
barrera = threading.Barrier(5)
|
||||
for _ in range(5):
|
||||
t = threading.Thread(target=f)
|
||||
t.start()
|
@ -0,0 +1,50 @@
|
||||
import threading
|
||||
import time
|
||||
import logging
|
||||
import random
|
||||
import queue
|
||||
|
||||
logging.basicConfig(level=logging.DEBUG,
|
||||
format='(%(threadName)-9s) %(message)s',)
|
||||
|
||||
BUF_SIZE = 10
|
||||
q = queue.Queue(BUF_SIZE)
|
||||
|
||||
class HiloProductor(threading.Thread):
|
||||
def __init__(self,name=None):
|
||||
super(HiloProductor,self).__init__()
|
||||
self.name = name
|
||||
|
||||
def run(self):
|
||||
while True:
|
||||
if not q.full():
|
||||
item = random.randint(1,10)
|
||||
q.put(item)
|
||||
logging.debug('Insertando "' + str(item)
|
||||
+ '" : ' + str(q.qsize()) + ' elementos en la cola')
|
||||
time.sleep(random.random())
|
||||
return
|
||||
|
||||
class HiloConsumidor(threading.Thread):
|
||||
def __init__(self,name=None):
|
||||
super(HiloConsumidor,self).__init__()
|
||||
self.name = name
|
||||
return
|
||||
|
||||
def run(self):
|
||||
while True:
|
||||
if not q.empty():
|
||||
item = q.get()
|
||||
logging.debug('Sacando "' + str(item)
|
||||
+ '" : ' + str(q.qsize()) + ' elementos en la cola')
|
||||
time.sleep(random.random())
|
||||
return
|
||||
|
||||
p = HiloProductor(name='productor')
|
||||
p2 = HiloProductor(name='productor2')
|
||||
|
||||
c = HiloConsumidor(name='consumidor')
|
||||
|
||||
p.start()
|
||||
p2.start()
|
||||
c.start()
|
@ -0,0 +1,13 @@
|
||||
import threading
|
||||
|
||||
def f():
|
||||
pass
|
||||
|
||||
try:
|
||||
t = threading.Thread(target=f)
|
||||
t.start()
|
||||
t.start()
|
||||
except Exception as e:
|
||||
print("Error:", e)
|
||||
print ("Final del programa")
|
||||
|
@ -0,0 +1,32 @@
|
||||
import threading
|
||||
import time
|
||||
|
||||
class HiloAbortable(threading.Thread):
|
||||
|
||||
def __init__(self):
|
||||
super(HiloAbortable, self).__init__()
|
||||
self._abort_event = threading.Event()
|
||||
|
||||
def abort(self):
|
||||
self._abort_event.set()
|
||||
|
||||
def aborted(self):
|
||||
return self._abort_event.is_set()
|
||||
|
||||
def run(self):
|
||||
while (True):
|
||||
if (self.aborted()):
|
||||
print ("Hilo abortado")
|
||||
break
|
||||
#resto del trabajo a ejecutar
|
||||
print ("trabajando...")
|
||||
|
||||
h =HiloAbortable()
|
||||
h.start()
|
||||
time.sleep(1)
|
||||
print ("Antes de invocación a abort()")
|
||||
h.abort()
|
||||
print ("Después de invocación de abort()")
|
||||
|
||||
|
||||
|
@ -0,0 +1,17 @@
|
||||
import ipaddress
|
||||
|
||||
ip = ipaddress.IPv4Address('224.0.0.1')
|
||||
|
||||
print("Bits en la IP:", ip.max_prefixlen)
|
||||
print("Multicast:", ip.is_multicast)
|
||||
print("Privada:", ip.is_private)
|
||||
print("Pública:", ip.is_global)
|
||||
print("No es específica:", ip.is_unspecified)
|
||||
print("Reservada:", ip.is_reserved)
|
||||
print("Loopback:", ip.is_loopback)
|
||||
print("Uso local:", ip.is_link_local)
|
||||
ip1 = ip + 1
|
||||
print("IP siguiente:", ip1)
|
||||
ip2 = ip - 1
|
||||
print("IP anterior:", ip2)
|
||||
print(ip1 , "mayor que", ip2, ":", ip1 > ip2)
|
@ -0,0 +1,20 @@
|
||||
import ipaddress
|
||||
|
||||
network = ipaddress.IPv4Network("192.168.1.0/24")
|
||||
|
||||
print("Dirección de la red:", network.network_address)
|
||||
print("Dirección de broadcast:", network.broadcast_address)
|
||||
print("Máscara de red:", network.netmask)
|
||||
print("Red y máscara de red:", network.with_netmask)
|
||||
print("Red y máscara de host:", network.with_hostmask)
|
||||
print("Longitud de la máscara de red", network.prefixlen)
|
||||
print("Máximo número de equipos en la red:", network.num_addresses)
|
||||
print("La red 192.168.0.0/16 la contiene:",
|
||||
network.overlaps(ipaddress.IPv4Network("192.168.0.0/16")))
|
||||
print("Supernet:", network.supernet(prefixlen_diff=1))
|
||||
print("La red es una subnet de 192.168.0.0/16:",
|
||||
network.subnet_of(ipaddress.IPv4Network("192.168.0.0/16")))
|
||||
print("La red es una supernet de 192.168.0.0/16:",
|
||||
network.supernet_of(ipaddress.IPv4Network("192.168.0.0/16")))
|
||||
print("Comparar con 192.168.0.0/16:",
|
||||
network.compare_networks(ipaddress.IPv4Network("192.168.0.0/16")))
|
@ -0,0 +1,6 @@
|
||||
import socket
|
||||
|
||||
host = socket.gethostname()
|
||||
ip = socket.gethostbyname(host)
|
||||
print ("Nombre del equipo: %s" %host)
|
||||
print ("Dirección IP: %s" %ip)
|
@ -0,0 +1,8 @@
|
||||
import ipaddress
|
||||
import socket
|
||||
|
||||
direcciones = socket.getaddrinfo(socket.gethostname(), None)
|
||||
for ip in direcciones:
|
||||
# ip_ver = ipaddress.ip_address(str(ip[4][0]))
|
||||
# if ip_ver.version == 4:
|
||||
print (ip[4][0])
|
@ -0,0 +1,9 @@
|
||||
import socket
|
||||
|
||||
try:
|
||||
host = 'www.amazon.es'
|
||||
#host = socket.getfqdn()
|
||||
#host = 'DESKTOP-KEFADT0'
|
||||
print ("IP de %s: %s" %(host,socket.gethostbyname(host)))
|
||||
except socket.error as msg:
|
||||
print ("%s: %s" %(host, msg))
|
@ -0,0 +1,8 @@
|
||||
import socket
|
||||
|
||||
ip = "216.58.209.69"
|
||||
try:
|
||||
dominio = socket.gethostbyaddr(ip)[0]
|
||||
print ("La IP %s tiene una entrada DNS: %s" %(ip, dominio))
|
||||
except socket.error as msg:
|
||||
print ("%s: %s" %(ip, msg))
|
@ -0,0 +1,18 @@
|
||||
import socket
|
||||
|
||||
HOST = '127.0.0.1' # direccion de loopback standard para localhost
|
||||
PORT = 2000 # Puerto de escucha
|
||||
|
||||
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||
try:
|
||||
s.bind((HOST, PORT))
|
||||
s.listen(1)
|
||||
conn, addr = s.accept() #función bloqueante
|
||||
print (f"Conexión exitosa con el cliente. IP ({addr[0]}) Puerto ({addr[1]})")
|
||||
#cerramos la conexión con ese cliente
|
||||
conn.close()
|
||||
except socket.error as exc:
|
||||
print ("Excepción de socket: %s" % exc)
|
||||
finally:
|
||||
#cerramos la escucha general de nuestro servidor
|
||||
s.close()
|
@ -0,0 +1,14 @@
|
||||
import socket
|
||||
|
||||
HOST = '127.0.0.1'
|
||||
PORT = 2000
|
||||
|
||||
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||
try:
|
||||
s.connect((HOST, PORT))
|
||||
print('Conectado con éxito')
|
||||
except socket.error as exc:
|
||||
print ("Excepción de socket: %s" % exc)
|
||||
finally:
|
||||
#cerramos la conexión, aunque el servidor ya la habrá cerrado
|
||||
s.close()
|
@ -0,0 +1,17 @@
|
||||
import socket
|
||||
|
||||
HOST = '' # todas las interfaces locales a la escucha
|
||||
PORT = 2000 # Puerto de escucha
|
||||
|
||||
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
|
||||
s.bind((HOST, PORT))
|
||||
s.listen()
|
||||
conn, addr = s.accept() #línea bloqueante
|
||||
with conn:
|
||||
print(f"Conexión exitosa con el cliente. IP ({addr[0]}) Puerto ({addr[1]})")
|
||||
while True:
|
||||
data = conn.recv(1024) #línea bloqueante
|
||||
print (data)
|
||||
if data==b"0":
|
||||
break
|
||||
conn.sendall(b"mensaje recibido")
|
@ -0,0 +1,23 @@
|
||||
from audioop import add
|
||||
import socket
|
||||
|
||||
HOST = '' # todas las interfaces locales a la escuchat
|
||||
PORT = 2000 # Puerto de escucha
|
||||
|
||||
try:
|
||||
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
|
||||
s.bind((HOST, PORT))
|
||||
s.listen()
|
||||
conn, addr = s.accept() #línea bloqueante
|
||||
with conn:
|
||||
print(f"Conexión exitosa con el cliente. IP ({addr[0]}) Puerto ({addr[1]})")
|
||||
while True:
|
||||
data = conn.recv(1024) #línea bloqueante
|
||||
print (data)
|
||||
if data==b"0":
|
||||
break
|
||||
conn.sendall(b"mensaje recibido")
|
||||
|
||||
except socket.error as e:
|
||||
print ("Error en socket: %s" % e)
|
||||
|
@ -0,0 +1,14 @@
|
||||
import socket
|
||||
|
||||
HOST = '127.0.0.1'
|
||||
PORT = 2000
|
||||
|
||||
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
|
||||
s.connect((HOST, PORT))
|
||||
print('Conectado con éxito')
|
||||
s.send(b'Yo, tu cliente, te saludo.')
|
||||
#numBytes = s.send(b'Yo, tu cliente, te saludo.')
|
||||
#print (numBytes)
|
||||
data = s.recv(1024) #línea bloqueante
|
||||
|
||||
print('Recibido:', repr(data))
|
@ -0,0 +1,18 @@
|
||||
import socket
|
||||
|
||||
HOST = ''
|
||||
PORT = 2000
|
||||
|
||||
with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as s:
|
||||
|
||||
s_addr = (HOST, PORT)
|
||||
s.bind(s_addr)
|
||||
#recibir
|
||||
datos, addr = s.recvfrom(1024) #línea bloqueante
|
||||
print('recibidos {} bytes de {}'.format(len(datos), addr))
|
||||
print(datos)
|
||||
|
||||
#enviar
|
||||
if datos:
|
||||
sent = s.sendto(b"Saludos desde el Servidor UDP", addr)
|
||||
print('enviados {} bytes de vuelta a {}'.format(sent, addr))
|
@ -0,0 +1,19 @@
|
||||
import socket
|
||||
|
||||
HOST = ''
|
||||
PORT = 2000
|
||||
|
||||
with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as s:
|
||||
|
||||
s_addr = (HOST, PORT)
|
||||
s.bind(s_addr)
|
||||
while True:
|
||||
#recibir
|
||||
datos, addr = s.recvfrom(1024) #línea bloqueante
|
||||
print('recibidos {} bytes de {}'.format(len(datos), addr))
|
||||
print(datos)
|
||||
|
||||
#enviar
|
||||
if datos:
|
||||
sent = s.sendto(b"Saludos desde el Servidor UDP", addr)
|
||||
print('enviados {} bytes de vuelta a {}'.format(sent, addr))
|
@ -0,0 +1,19 @@
|
||||
import socket
|
||||
|
||||
HOST = '127.0.0.1'
|
||||
PORT = 2000
|
||||
|
||||
with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as s:
|
||||
s_addr = (HOST, PORT)
|
||||
server_address = (s_addr)
|
||||
message = b'Saludos desde el cliente'
|
||||
|
||||
# enviar
|
||||
print('Enviando {!r}'.format(message))
|
||||
sent = s.sendto(message, server_address)
|
||||
|
||||
# recibir
|
||||
print('Esperando por la respuesta')
|
||||
data, server = s.recvfrom(1024) #línea bloqueante
|
||||
print('recibidos {!r}'.format(data))
|
||||
|
@ -0,0 +1,32 @@
|
||||
import socketserver
|
||||
|
||||
class TCPSocketHandler(socketserver.BaseRequestHandler):
|
||||
#Clase para manejar las conexiones, se instancia una por cliente
|
||||
|
||||
def handle(self):
|
||||
#medodo a sobreescribir para nuestro propio manejo
|
||||
#self.request se refiere al socket client conectado
|
||||
print (f"Se han conectado desde: {self.client_address[0]} [{self.client_address[1]}]")
|
||||
while True:
|
||||
self.data = self.request.recv(128).strip()
|
||||
print("Datos recibidos: ", self.data)
|
||||
#remitimos los mismos datos en mayúscula
|
||||
self.request.sendall(self.data.upper())
|
||||
if self.data == b"":
|
||||
break
|
||||
if self.data ==b"#":
|
||||
raise KeyboardInterrupt
|
||||
|
||||
if __name__ == "__main__":
|
||||
HOST, PORT = "", 2000
|
||||
|
||||
# instanciamos el socket servidor con la clase asociada de callback
|
||||
server = socketserver.TCPServer((HOST, PORT), TCPSocketHandler)
|
||||
|
||||
# activamos el servidor (ponemos a la espera de clientes)
|
||||
# podemos provocar una excepción con Ctrl-C
|
||||
try:
|
||||
server.serve_forever()
|
||||
except KeyboardInterrupt:
|
||||
print ("servidor finalizado")
|
||||
|
@ -0,0 +1,33 @@
|
||||
import socketserver
|
||||
|
||||
class TCPSocketHandler(socketserver.BaseRequestHandler):
|
||||
#Clase para manejar las conexiones, se instancia una por cliente
|
||||
|
||||
def handle(self):
|
||||
#medodo a sobreescribir para nuestro propio manejo
|
||||
#self.request se refiere al socket client conectado
|
||||
print (f"Se han conectado desde: {self.client_address[0]} [{self.client_address[1]}]")
|
||||
|
||||
self.data = self.request.recv(128).strip()
|
||||
print("Datos recibidos: ", self.data)
|
||||
#remitimos los mismos datos en mayúscula
|
||||
self.request.sendall(self.data.upper())
|
||||
# if self.data == b"0":
|
||||
# break
|
||||
# if self.data ==b"#":
|
||||
# raise KeyboardInterrupt
|
||||
|
||||
if __name__ == "__main__":
|
||||
HOST, PORT = "", 2000
|
||||
|
||||
# instanciamos el socket servidor con la clase asociada de callback
|
||||
server = socketserver.TCPServer((HOST, PORT), TCPSocketHandler)
|
||||
|
||||
# activamos el servidor (ponemos a la espera de clientes)
|
||||
# podemos provocar una excepción con Ctrl-C
|
||||
try:
|
||||
while True:
|
||||
server.handle_request()
|
||||
except KeyboardInterrupt:
|
||||
print ("servidor finalizado")
|
||||
|
@ -0,0 +1,16 @@
|
||||
import socket
|
||||
|
||||
HOST, PORT = "localhost", 2000
|
||||
data = "hola desde cliente tcp"
|
||||
|
||||
|
||||
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
|
||||
#conectar
|
||||
sock.connect((HOST, PORT))
|
||||
#enviar
|
||||
sock.sendall(bytes(data + "\n", "utf-8"))
|
||||
#recibir
|
||||
recibido = str(sock.recv(64), "utf-8")
|
||||
|
||||
print("Enviado: {}".format(data))
|
||||
print("Recibido: {}".format(recibido))
|
@ -0,0 +1,59 @@
|
||||
from asyncio.windows_events import NULL
|
||||
import socketserver
|
||||
import time
|
||||
import threading
|
||||
|
||||
class TCPSocketHandler(socketserver.BaseRequestHandler):
|
||||
#Clase para manejar las conexiones, se instancia una por cliente
|
||||
# def __init__(self, server_address, RequestHandlerClass, ):
|
||||
|
||||
def set_shutdown_request(self):
|
||||
self.shutdown_request = True
|
||||
|
||||
|
||||
def handle(self):
|
||||
#medodo a sobreescribir para nuestro propio manejo
|
||||
#self.request se refiere al socket client conectado
|
||||
print (f"Se han conectado desde: {self.client_address[0]} [{self.client_address[1]}]")
|
||||
#print (self.server.request_queue_size)
|
||||
self.shutdown_request = False
|
||||
while not self.shutdown_request:
|
||||
print (self.shutdown_request)
|
||||
self.data = self.request.recv(128).strip()
|
||||
print("Datos recibidos: ", self.data)
|
||||
#remitimos los mismos datos en mayúscula
|
||||
self.request.sendall(self.data.upper())
|
||||
if self.data == b"0":
|
||||
break
|
||||
if self.data ==b"#":
|
||||
raise KeyboardInterrupt
|
||||
|
||||
def Servir(servidor):
|
||||
|
||||
|
||||
# instanciamos el socket servidor con la clase asociada de callback
|
||||
servidor = socketserver.TCPServer((HOST, PORT), TCPSocketHandler)
|
||||
# activamos el servidor (ponemos a la escucha)
|
||||
# podomos porvocar una excepción con Ctrl-C
|
||||
try:
|
||||
servidor.serve_forever()
|
||||
except KeyboardInterrupt:
|
||||
print ("servidor finalizado")
|
||||
|
||||
if __name__ == "__main__":
|
||||
HOST, PORT = "", 2000
|
||||
# instanciamos el socket servidor con la clase asociada de callback
|
||||
server = socketserver.TCPServer((HOST, PORT), TCPSocketHandler)
|
||||
server_thread = threading.Thread(target=server.serve_forever)
|
||||
# Exit the server thread when the main thread terminates
|
||||
server_thread.daemon = True
|
||||
server_thread.start()
|
||||
|
||||
print ("uno")
|
||||
time.sleep(10)
|
||||
print ("dos")
|
||||
server.
|
||||
server.shutdown()
|
||||
print ("tres")
|
||||
|
||||
|
@ -0,0 +1,26 @@
|
||||
import socketserver
|
||||
|
||||
class UDPHandler(socketserver.BaseRequestHandler):
|
||||
#self.request es el par [datos,socketServidor]
|
||||
|
||||
def handle(self):
|
||||
data = self.request[0].strip()
|
||||
sock = self.request[1]
|
||||
print(" El cliente: {} envió:".format(self.client_address[0]))
|
||||
print(data)
|
||||
#bajo alguna circunstancia podemos detener el servidor con la siguiente línea
|
||||
if data ==b"#":
|
||||
raise KeyboardInterrupt
|
||||
#envío de datos al cliente
|
||||
sock.sendto(data.upper(), self.client_address)
|
||||
|
||||
if __name__ == "__main__":
|
||||
HOST, PORT = "", 2000
|
||||
with socketserver.UDPServer((HOST, PORT), UDPHandler) as server:
|
||||
# activamos el servidor (ponemos a la escucha)
|
||||
# podomos porvocar una excepción con Ctrl-C
|
||||
try:
|
||||
server.serve_forever()
|
||||
except KeyboardInterrupt:
|
||||
print ("servidor finalizado")
|
||||
|
@ -0,0 +1,15 @@
|
||||
import socket
|
||||
|
||||
HOST, PORT = "localhost", 2000
|
||||
data = "hola desde cliente udp"
|
||||
|
||||
#definir
|
||||
with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as sock:
|
||||
#se puede observar que no hay conectar
|
||||
#enviar
|
||||
sock.sendto(bytes(data + "\n", "utf-8"), (HOST, PORT))
|
||||
#recibir
|
||||
recibido = str(sock.recv(64), "utf-8")
|
||||
|
||||
print("Enviado: {}".format(data))
|
||||
print("Recibido: {}".format(recibido))
|
@ -0,0 +1,38 @@
|
||||
import socketserver
|
||||
|
||||
class TCPStreamHandler(socketserver.StreamRequestHandler):
|
||||
#Clase para manejar las conexiones, se instancia una por cliente
|
||||
#transmisión de datos por stream
|
||||
|
||||
def handle(self):
|
||||
# self.rfile es un stream de lectura
|
||||
# self.wfile es un stream de escritura
|
||||
print (f"Se han conectado desde: {self.client_address[0]} [{self.client_address[1]}]")
|
||||
while True:
|
||||
self.data = self.rfile.readline().strip()
|
||||
print("Datos recibidos: ", self.data)
|
||||
#remitimos los mismos datos en mayúscula
|
||||
self.wfile.write(self.data.upper())
|
||||
#self.wfile.writelines((b"uno", b"dos",b"tres"))
|
||||
if self.data == b"":
|
||||
break
|
||||
if self.data ==b"#":
|
||||
raise KeyboardInterrupt
|
||||
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
HOST, PORT = "", 2000
|
||||
|
||||
# instanciamos el socket servidor con la clase asociada de callback
|
||||
server = socketserver.TCPServer((HOST, PORT), TCPStreamHandler)
|
||||
|
||||
# activamos el servidor (ponemos a la escucha)
|
||||
# podomos porvocar una excepción con Ctrl-C
|
||||
try:
|
||||
server.serve_forever()
|
||||
except KeyboardInterrupt:
|
||||
print ("servidor finalizado")
|
||||
|
||||
|
||||
|
@ -0,0 +1,29 @@
|
||||
import threading
|
||||
import socketserver
|
||||
|
||||
class ThreadedTCPRequestHandler(socketserver.StreamRequestHandler):
|
||||
|
||||
def handle(self):
|
||||
data = self.rfile.readline().strip().decode('ascii')
|
||||
cur_thread = threading.currentThread()
|
||||
print (threading.current_thread().name)
|
||||
response = bytes("{}: {}".format(cur_thread.name, data), 'ascii')
|
||||
self.request.sendall(response)
|
||||
|
||||
class ThreadedTCPServer(socketserver.ThreadingMixIn, socketserver.TCPServer):
|
||||
pass
|
||||
|
||||
if __name__ == "__main__":
|
||||
HOST, PORT = "", 2000
|
||||
server = ThreadedTCPServer((HOST, PORT), ThreadedTCPRequestHandler)
|
||||
|
||||
# activamos el servidor (ponemos a la escucha)
|
||||
# podomos porvocar una excepción con Ctrl-C
|
||||
try:
|
||||
server_thread = threading.Thread(target=server.serve_forever)
|
||||
server_thread.start()
|
||||
while True:
|
||||
pass
|
||||
except KeyboardInterrupt:
|
||||
print ("servidor finalizado")
|
||||
|
@ -0,0 +1,27 @@
|
||||
import asyncio
|
||||
|
||||
async def handle_echo(reader, writer):
|
||||
data = await reader.readline()
|
||||
mensaje = data.decode()
|
||||
addr = writer.get_extra_info('peername')
|
||||
|
||||
print(f"Recibido {mensaje!r} de {addr!r}")
|
||||
|
||||
print(f"Enviado: {mensaje!r}")
|
||||
writer.write(data)
|
||||
await writer.drain()
|
||||
|
||||
print("Cliente cerrado")
|
||||
writer.close()
|
||||
|
||||
async def main():
|
||||
server = await asyncio.start_server(
|
||||
handle_echo, '127.0.0.1', 2000)
|
||||
|
||||
addrs = ', '.join(str(sock.getsockname()) for sock in server.sockets)
|
||||
print(f'Servidor en {addrs}')
|
||||
|
||||
async with server:
|
||||
await server.serve_forever()
|
||||
|
||||
asyncio.run(main())
|
@ -0,0 +1,28 @@
|
||||
import socket
|
||||
import random
|
||||
|
||||
IP = ''
|
||||
PORT = 2000
|
||||
adivinar = random.randrange(1,9)
|
||||
|
||||
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
|
||||
s.bind((IP,PORT))
|
||||
s.listen()
|
||||
print("Servidor escuchando")
|
||||
print("Número a adivinar: " +str(adivinar))
|
||||
|
||||
(cli,add) = s.accept()
|
||||
print("Cliente conectado en:",add)
|
||||
|
||||
cli.send(b"Intenta adivinar mi numero! ")
|
||||
while True :
|
||||
data = cli.recv(64).decode()
|
||||
print (data)
|
||||
if int(data) == adivinar:
|
||||
cli.send(b"HAS ACERTADO")
|
||||
break
|
||||
elif int(data) > adivinar:
|
||||
cli.send(b"Mi numero es menor ")
|
||||
else:
|
||||
cli.send(b"Mi numero es mayor")
|
||||
cli.close()
|
@ -0,0 +1,36 @@
|
||||
import socket
|
||||
import random
|
||||
import threading
|
||||
|
||||
adivinar = random.randrange(1,9)
|
||||
|
||||
def ManejaCliente(c,a):
|
||||
c.send(b"Intenta adivinar mi numero! ")
|
||||
while True :
|
||||
data = c.recv(64).decode()
|
||||
print (data)
|
||||
if int(data) == adivinar:
|
||||
c.send(b"HAS ACERTADO")
|
||||
break
|
||||
elif int(data) > adivinar:
|
||||
c.send(b"Mi numero es menor ")
|
||||
else:
|
||||
c.send(b"Mi numero es mayor")
|
||||
c.close()
|
||||
|
||||
if __name__ == '__main__':
|
||||
IP = ''
|
||||
PORT = 2000
|
||||
|
||||
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
|
||||
s.bind((IP,PORT))
|
||||
s.listen()
|
||||
print("Servidor escuchando")
|
||||
print("Número a adivinar: " +str(adivinar))
|
||||
|
||||
while True:
|
||||
(cli,addr) = s.accept()
|
||||
print("Cliente conectado en:",addr)
|
||||
#con cada conexión iniciamos un nuevo hilo que lo atienda
|
||||
t = threading.Thread(target=ManejaCliente, args=(cli,addr))
|
||||
t.start()
|
@ -0,0 +1,157 @@
|
||||
import socket
|
||||
import threading
|
||||
import time
|
||||
|
||||
class Jugador:
|
||||
def __init__(self):
|
||||
self._nick = "" #nombre del jugador
|
||||
self._addr = "" #dirección del cliente
|
||||
self._jugada= "" #piedra/papel/tijera
|
||||
self._puntos= 0
|
||||
|
||||
@property
|
||||
def nick(self):
|
||||
return self._nick
|
||||
|
||||
@property
|
||||
def addr(self):
|
||||
return self._addr
|
||||
|
||||
@property
|
||||
def jugada(self):
|
||||
return self._jugada
|
||||
|
||||
@property
|
||||
def puntos(self):
|
||||
return self._puntos
|
||||
|
||||
@property
|
||||
def libre(self):
|
||||
if self._nick == "":
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
|
||||
@property
|
||||
def sinJugar(self):
|
||||
if self._jugada == "":
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
|
||||
@nick.setter
|
||||
def nick(self, nombre):
|
||||
self._nick = nombre
|
||||
|
||||
@addr.setter
|
||||
def addr(self, nombre):
|
||||
self._addr = nombre
|
||||
|
||||
@jugada.setter
|
||||
def jugada(self, nombre):
|
||||
if nombre in ["piedra","papel","tijera",""]:
|
||||
self._jugada = nombre
|
||||
|
||||
@puntos.setter
|
||||
def puntos(self, nombre):
|
||||
self._puntos = nombre
|
||||
|
||||
def puntuar(self):
|
||||
print (self._puntos)
|
||||
self._puntos += 1
|
||||
|
||||
def arbitrar(self,otroJugador):
|
||||
#devuelve 0 si empate, -1 si gana otroJugador, 1 si gana el objeto actual
|
||||
if ((self.jugada =="piedra" and otroJugador.jugada =="tijera") or
|
||||
(self.jugada =="tijera" and otroJugador.jugada =="papel") or
|
||||
(self.jugada =="papel" and otroJugador.jugada =="piedra")):
|
||||
return 1
|
||||
elif ((otroJugador.jugada =="piedra" and self.jugada =="tijera") or
|
||||
(otroJugador.jugada =="tijera" and self.jugada =="papel") or
|
||||
(otroJugador.jugada =="papel" and self.jugada =="piedra")):
|
||||
return -1
|
||||
else:
|
||||
return 0
|
||||
|
||||
class ManejoCliente(threading.Thread):
|
||||
def __init__(self,clientAddress,clientsocket):
|
||||
threading.Thread.__init__(self)
|
||||
self.csocket = clientsocket
|
||||
self.cAddress = clientAddress
|
||||
print ("Cliente conectado desde: ", self.cAddress)
|
||||
|
||||
def run(self):
|
||||
print ("Escuchando a peticiones de cliente: ", self.cAddress)
|
||||
#mensaje de bienvenida con el protocolo
|
||||
bienvenida ="#INSCRIBIR#nombre#\n#JUGADA#{piedra|papel|tijera}#\n#PUNTUACION#"
|
||||
self.csocket.send(bytes(bienvenida,'UTF-8'))
|
||||
|
||||
while True:
|
||||
data = self.csocket.recv(512).decode("utf_8")
|
||||
print ("Enviado desde cliente:<",data,">")
|
||||
subdatos = data.split("#")
|
||||
respuesta="#OK#"
|
||||
if subdatos[1] == "INSCRIBIR":
|
||||
if jugador1.libre:
|
||||
jugador1.nick = subdatos[2]
|
||||
jugador1.addr = self.cAddress
|
||||
elif jugador2.libre:
|
||||
jugador2.nick = subdatos[2]
|
||||
jugador2.addr = self.cAddress
|
||||
else:
|
||||
respuesta="#NOK#ya hay dos jugadores#"
|
||||
elif subdatos[1] == "JUGADA":
|
||||
#comprobra valor válido
|
||||
if subdatos[2] not in ["piedra","papel","tijera"]:
|
||||
respuesta="#NOK#valores válidos: piedra/papel/tijera#"
|
||||
#comprobar autenticidad IP+puerto registrados
|
||||
elif self.cAddress in [jugador1.addr, jugador2.addr]:
|
||||
#estamos con el jugador 1
|
||||
if self.cAddress == jugador1.addr:
|
||||
jugador1.jugada = subdatos[2]
|
||||
#pausar hasta que jugador 2 no haga su jugada
|
||||
while (jugador2.sinJugar):
|
||||
time.sleep(0.1)
|
||||
#estamos con el jugador 2
|
||||
else:
|
||||
jugador2.jugada = subdatos[2]
|
||||
#pausar hasta que jugador 1 no haga su jugada
|
||||
while (jugador1.sinJugar):
|
||||
print (jugador1.sinJugar)
|
||||
time.sleep(0.1)
|
||||
#gana el 1
|
||||
if jugador1.arbitrar(jugador2)>0:
|
||||
jugador1.puntuar()
|
||||
respuesta="#OK#GANADOR:" + jugador1.nick + "#"
|
||||
#gana el 2
|
||||
elif jugador1.arbitrar(jugador2)<0:
|
||||
jugador2.puntuar()
|
||||
respuesta="#OK#GANADOR:" + jugador2.nick + "#"
|
||||
else:
|
||||
respuesta ="#OK#EMPATE#"
|
||||
#pequeña trampilla para que no colapsen los hilos
|
||||
time.sleep(0.5)
|
||||
jugador1.jugada =""
|
||||
jugador2.jugada =""
|
||||
#la ip+puerto del jugador no estaba en la partida
|
||||
else:
|
||||
respuesta="#NOK#el jugador no está en la partida#"
|
||||
elif subdatos[1] == "PUNTUACION":
|
||||
respuesta="#OK#" + jugador1.nick + ":" + str(jugador1.puntos) + "#" + jugador2.nick + ":" + str(jugador2.puntos) + "#"
|
||||
|
||||
self.csocket.send(bytes(respuesta,'UTF-8'))
|
||||
|
||||
if __name__ == '__main__':
|
||||
jugador1 = Jugador()
|
||||
jugador2 = Jugador()
|
||||
HOST = ""
|
||||
PORT = 2000
|
||||
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||
#server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
|
||||
server.bind((HOST, PORT))
|
||||
print("Servidor iniciado. Esperando clientes...")
|
||||
while True:
|
||||
server.listen(1)
|
||||
clientsock, clientAddress = server.accept()
|
||||
t = ManejoCliente(clientAddress, clientsock)
|
||||
t.start()
|
@ -0,0 +1,14 @@
|
||||
import socket
|
||||
|
||||
SERVER = "127.0.0.1"
|
||||
PORT = 2000
|
||||
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||
client.connect((SERVER, PORT))
|
||||
while True:
|
||||
in_data = client.recv(1024)
|
||||
print("From Server :" ,in_data.decode())
|
||||
out_data = input()
|
||||
client.sendall(bytes(out_data,'UTF-8'))
|
||||
if out_data=='fin':
|
||||
break
|
||||
client.close()
|
@ -0,0 +1,50 @@
|
||||
import socket
|
||||
from tkinter import *
|
||||
|
||||
def conectarServidor():
|
||||
global client
|
||||
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||
client.connect((SERVER, PORT))
|
||||
lblInfo["text"]= client.recv(1024).decode()
|
||||
|
||||
def inscribir ():
|
||||
global client
|
||||
client.sendall(bytes("#INSCRIBIR#"+entNombre.get() +"#",'UTF-8'))
|
||||
lblInfo["text"]= client.recv(1024).decode()
|
||||
|
||||
def enviarJugada(jugada):
|
||||
global client
|
||||
client.sendall(bytes("#JUGADA#"+jugada+"#",'UTF-8'))
|
||||
lblInfo["text"]= client.recv(1024).decode()
|
||||
|
||||
def consultaPuntos():
|
||||
global client
|
||||
client.sendall(bytes("#PUNTUACION#",'UTF-8'))
|
||||
lblInfo["text"]= client.recv(1024).decode()
|
||||
|
||||
#if __name__ == '__main__':
|
||||
SERVER = "127.0.0.1"
|
||||
PORT = 2000
|
||||
client = None
|
||||
informacion =""
|
||||
fPPT = Tk()
|
||||
fPPT.title("Piedra-Papel-Tijera")
|
||||
fPPT.geometry("300x300")
|
||||
fPPT.resizable(True, True)
|
||||
lblInfo = Label(fPPT, text=informacion)
|
||||
lblInfo.place(x=0,y=230)
|
||||
btnConn = Button(fPPT, text = 'Conectar', command = conectarServidor)
|
||||
btnConn.place(x = 150,y = 50)
|
||||
entNombre = Entry(fPPT)
|
||||
entNombre.place(x = 20,y=100)
|
||||
btnInscribir = Button(fPPT, text = 'Inscribir', command = inscribir)
|
||||
btnInscribir.place(x = 150,y = 100)
|
||||
btnPiedra = Button(fPPT, text = 'piedra', command = lambda: enviarJugada("piedra"))
|
||||
btnPiedra.place(x = 50,y = 150)
|
||||
btnPapel = Button(fPPT, text = 'papel', command = lambda: enviarJugada("papel"))
|
||||
btnPapel.place(x = 100,y = 150)
|
||||
btnTijera = Button(fPPT, text = 'tijera', command = lambda: enviarJugada("tijera"))
|
||||
btnTijera.place(x = 150,y = 150)
|
||||
btnPuntos = Button(fPPT, text = 'Puntuación', command =consultaPuntos)
|
||||
btnPuntos.place(x = 150,y = 200)
|
||||
fPPT.mainloop()
|
@ -0,0 +1,55 @@
|
||||
import socket
|
||||
import threading
|
||||
from tkinter import *
|
||||
|
||||
def conectarServidor():
|
||||
global client
|
||||
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||
client.connect((SERVER, PORT))
|
||||
lblInfo["text"]= client.recv(1024).decode()
|
||||
|
||||
def inscribir ():
|
||||
global client
|
||||
client.sendall(bytes("#INSCRIBIR#"+entNombre.get() +"#",'UTF-8'))
|
||||
lblInfo["text"]= client.recv(1024).decode()
|
||||
|
||||
def hiloJugada(cli, jug):
|
||||
cli.sendall(bytes("#JUGADA#"+jug+"#",'UTF-8'))
|
||||
lblInfo["text"]= cli.recv(1024).decode()
|
||||
|
||||
def enviarJugada(jugada):
|
||||
global client
|
||||
h = threading.Thread(target=hiloJugada, args=[client,jugada])
|
||||
h.start()
|
||||
|
||||
def consultaPuntos():
|
||||
global client
|
||||
client.sendall(bytes("#PUNTUACION#",'UTF-8'))
|
||||
lblInfo["text"]= client.recv(1024).decode()
|
||||
|
||||
#if __name__ == '__main__':
|
||||
SERVER = "127.0.0.1"
|
||||
PORT = 2000
|
||||
client = None
|
||||
informacion =""
|
||||
fPPT = Tk()
|
||||
fPPT.title("Piedra-Papel-Tijera")
|
||||
fPPT.geometry("300x300")
|
||||
fPPT.resizable(True, True)
|
||||
lblInfo = Label(fPPT, text=informacion)
|
||||
lblInfo.place(x=0,y=230)
|
||||
btnConn = Button(fPPT, text = 'Conectar', command = conectarServidor)
|
||||
btnConn.place(x = 150,y = 50)
|
||||
entNombre = Entry(fPPT)
|
||||
entNombre.place(x = 20,y=100)
|
||||
btnInscribir = Button(fPPT, text = 'Inscribir', command = inscribir)
|
||||
btnInscribir.place(x = 150,y = 100)
|
||||
btnPiedra = Button(fPPT, text = 'piedra', command = lambda: enviarJugada("piedra"))
|
||||
btnPiedra.place(x = 50,y = 150)
|
||||
btnPapel = Button(fPPT, text = 'papel', command = lambda: enviarJugada("papel"))
|
||||
btnPapel.place(x = 100,y = 150)
|
||||
btnTijera = Button(fPPT, text = 'tijera', command = lambda: enviarJugada("tijera"))
|
||||
btnTijera.place(x = 150,y = 150)
|
||||
btnPuntos = Button(fPPT, text = 'Puntuación', command =consultaPuntos)
|
||||
btnPuntos.place(x = 150,y = 200)
|
||||
fPPT.mainloop()
|
@ -0,0 +1,160 @@
|
||||
import socket
|
||||
import threading
|
||||
|
||||
class Jugador:
|
||||
def __init__(self):
|
||||
self._nick = "" #nombre del jugador
|
||||
self._addr = "" #dirección del cliente
|
||||
self._jugada= "" #piedra/papel/tijera
|
||||
self._puntos= 0
|
||||
|
||||
@property
|
||||
def nick(self):
|
||||
return self._nick
|
||||
|
||||
@property
|
||||
def addr(self):
|
||||
return self._addr
|
||||
|
||||
@property
|
||||
def jugada(self):
|
||||
return self._jugada
|
||||
|
||||
@property
|
||||
def puntos(self):
|
||||
return self._puntos
|
||||
|
||||
@property
|
||||
def libre(self):
|
||||
if self._nick == "":
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
|
||||
@property
|
||||
def sinJugar(self):
|
||||
if self._jugada == "":
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
|
||||
@nick.setter
|
||||
def nick(self, nombre):
|
||||
self._nick = nombre
|
||||
|
||||
@addr.setter
|
||||
def addr(self, nombre):
|
||||
self._addr = nombre
|
||||
|
||||
@jugada.setter
|
||||
def jugada(self, nombre):
|
||||
if nombre in ["piedra","papel","tijera",""]:
|
||||
self._jugada = nombre
|
||||
|
||||
@puntos.setter
|
||||
def puntos(self, nombre):
|
||||
self._puntos = nombre
|
||||
|
||||
def puntuar(self):
|
||||
print (self._puntos)
|
||||
self._puntos += 1
|
||||
|
||||
def arbitrar(self,otroJugador):
|
||||
#devuelve 0 si empate, -1 si gana otroJugador, 1 si gana el objeto actual
|
||||
if ((self.jugada =="piedra" and otroJugador.jugada =="tijera") or
|
||||
(self.jugada =="tijera" and otroJugador.jugada =="papel") or
|
||||
(self.jugada =="papel" and otroJugador.jugada =="piedra")):
|
||||
return 1
|
||||
elif ((otroJugador.jugada =="piedra" and self.jugada =="tijera") or
|
||||
(otroJugador.jugada =="tijera" and self.jugada =="papel") or
|
||||
(otroJugador.jugada =="papel" and self.jugada =="piedra")):
|
||||
return -1
|
||||
else:
|
||||
return 0
|
||||
|
||||
class ManejoCliente(threading.Thread):
|
||||
def __init__(self,clientAddress,clientsocket):
|
||||
threading.Thread.__init__(self)
|
||||
self.csocket = clientsocket
|
||||
self.cAddress = clientAddress
|
||||
print ("Cliente conectado desde: ", self.cAddress)
|
||||
|
||||
def run(self):
|
||||
global numJugadaActual
|
||||
print ("Escuchando a peticiones de cliente: ", self.cAddress)
|
||||
#mensaje de bienvenida con el protocolo
|
||||
bienvenida ="#INSCRIBIR#nombre#\n#JUGADA#{piedra|papel|tijera}#\n#RESULTADOJUGADA#numeroJugada#\n#PUNTUACION#"
|
||||
self.csocket.send(bytes(bienvenida,'UTF-8'))
|
||||
|
||||
while True:
|
||||
data = self.csocket.recv(512).decode("utf_8")
|
||||
print ("Enviado desde cliente:<",data,">")
|
||||
subdatos = data.split("#")
|
||||
respuesta="#OK#"
|
||||
if subdatos[1] == "INSCRIBIR":
|
||||
if jugador1.libre:
|
||||
jugador1.nick = subdatos[2]
|
||||
jugador1.addr = self.cAddress
|
||||
elif jugador2.libre:
|
||||
jugador2.nick = subdatos[2]
|
||||
jugador2.addr = self.cAddress
|
||||
else:
|
||||
respuesta="#NOK#ya hay dos jugadores#"
|
||||
elif subdatos[1] == "JUGADA":
|
||||
#comprobra valor válido
|
||||
if subdatos[2] not in ["piedra","papel","tijera"]:
|
||||
respuesta="#NOK#valores válidos: piedra/papel/tijera#"
|
||||
#comprobar autenticidad IP+puerto registrados
|
||||
elif self.cAddress in [jugador1.addr, jugador2.addr]:
|
||||
#estamos con el jugador 1
|
||||
if self.cAddress == jugador1.addr:
|
||||
jugador1.jugada = subdatos[2]
|
||||
#estamos con el jugador 2
|
||||
else:
|
||||
jugador2.jugada = subdatos[2]
|
||||
respuesta="#OK#" +str(numJugadaActual+1) +"#"
|
||||
#comprobamos si podemos arbitrar jugada
|
||||
with lock:
|
||||
if (not jugador1.sinJugar and not jugador2.sinJugar):
|
||||
#gana el 1
|
||||
if jugador1.arbitrar(jugador2)>0:
|
||||
jugador1.puntuar()
|
||||
historicoJug[len(historicoJug):] =["#OK#GANADOR:" + jugador1.nick + "#"]
|
||||
#gana el 2
|
||||
elif jugador1.arbitrar(jugador2)<0:
|
||||
jugador2.puntuar()
|
||||
historicoJug[len(historicoJug):] =["#OK#GANADOR:" + jugador2.nick + "#"]
|
||||
else:
|
||||
historicoJug[len(historicoJug):] =["#OK#EMPATE#"]
|
||||
jugador1.jugada =""
|
||||
jugador2.jugada =""
|
||||
numJugadaActual +=1
|
||||
#la ip+puerto del jugador no estaba en la partida
|
||||
else:
|
||||
respuesta="#NOK#el jugador no está en la partida#"
|
||||
elif subdatos[1] == "RESULTADOJUGADA":
|
||||
if int(subdatos[2])>0 and int(subdatos[2]) <= numJugadaActual:
|
||||
respuesta =historicoJug[int(subdatos[2])-1]
|
||||
else:
|
||||
respuesta = "#NOK#número de jugada no válido#"
|
||||
elif subdatos[1] == "PUNTUACION":
|
||||
respuesta="#OK#" + jugador1.nick + ":" + str(jugador1.puntos) + "#" + jugador2.nick + ":" + str(jugador2.puntos) + "#"
|
||||
|
||||
self.csocket.send(bytes(respuesta,'UTF-8'))
|
||||
|
||||
if __name__ == '__main__':
|
||||
jugador1 = Jugador()
|
||||
jugador2 = Jugador()
|
||||
numJugadaActual = 0 #almacena el número actual de jugada
|
||||
historicoJug = [] #mensajes de ganador para cada jugada
|
||||
lock = threading.Lock()
|
||||
HOST = ""
|
||||
PORT = 2000
|
||||
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||
server.bind((HOST, PORT))
|
||||
print("Servidor iniciado. Esperando clientes...")
|
||||
while True:
|
||||
server.listen(1)
|
||||
clientsock, clientAddress = server.accept()
|
||||
t = ManejoCliente(clientAddress, clientsock)
|
||||
t.start()
|
@ -0,0 +1,59 @@
|
||||
import socket
|
||||
from tkinter import *
|
||||
|
||||
def conectarServidor():
|
||||
global client
|
||||
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||
client.connect((SERVER, PORT))
|
||||
lblInfo["text"]= client.recv(1024).decode()
|
||||
|
||||
def inscribir ():
|
||||
global client
|
||||
client.sendall(bytes("#INSCRIBIR#"+entNombre.get() +"#",'UTF-8'))
|
||||
lblInfo["text"]= client.recv(1024).decode()
|
||||
|
||||
def enviarJugada(jugada):
|
||||
global client
|
||||
client.sendall(bytes("#JUGADA#"+jugada+"#",'UTF-8'))
|
||||
lblInfo["text"]= client.recv(1024).decode()
|
||||
|
||||
def consultaPuntos():
|
||||
global client
|
||||
client.sendall(bytes("#PUNTUACION#",'UTF-8'))
|
||||
lblInfo["text"]= client.recv(1024).decode()
|
||||
|
||||
def resultadoJugada(numJ):
|
||||
global client
|
||||
client.sendall(bytes("#RESULTADOJUGADA#"+numJ+"#",'UTF-8'))
|
||||
lblInfo["text"]= client.recv(1024).decode()
|
||||
|
||||
#if __name__ == '__main__':
|
||||
SERVER = "127.0.0.1"
|
||||
PORT = 2000
|
||||
client = None
|
||||
informacion =""
|
||||
fPPT = Tk()
|
||||
fPPT.title("Piedra-Papel-Tijera")
|
||||
fPPT.geometry("300x300")
|
||||
fPPT.resizable(True, True)
|
||||
lblInfo = Label(fPPT, text=informacion)
|
||||
lblInfo.place(x=0,y=230)
|
||||
btnConn = Button(fPPT, text = 'Conectar', command = conectarServidor)
|
||||
btnConn.place(x = 150,y = 50)
|
||||
entNombre = Entry(fPPT)
|
||||
entNombre.place(x = 20,y=100)
|
||||
btnInscribir = Button(fPPT, text = 'Inscribir', command = inscribir)
|
||||
btnInscribir.place(x = 150,y = 100)
|
||||
btnPiedra = Button(fPPT, text = 'piedra', command = lambda: enviarJugada("piedra"))
|
||||
btnPiedra.place(x = 50,y = 150)
|
||||
btnPapel = Button(fPPT, text = 'papel', command = lambda: enviarJugada("papel"))
|
||||
btnPapel.place(x = 100,y = 150)
|
||||
btnTijera = Button(fPPT, text = 'tijera', command = lambda: enviarJugada("tijera"))
|
||||
btnTijera.place(x = 150,y = 150)
|
||||
spnNumJugada = Spinbox(fPPT, from_=1, to=99,increment=1)
|
||||
spnNumJugada.place(x = 30,y=200, width=50)
|
||||
btnResultado = Button(fPPT, text = 'Resultado', command = lambda: resultadoJugada(spnNumJugada.get()))
|
||||
btnResultado.place(x = 80,y = 200)
|
||||
btnPuntos = Button(fPPT, text = 'Puntuación', command =consultaPuntos)
|
||||
btnPuntos.place(x = 150,y = 200)
|
||||
fPPT.mainloop()
|
@ -0,0 +1,180 @@
|
||||
import socket
|
||||
import threading
|
||||
|
||||
class Jugador:
|
||||
def __init__(self):
|
||||
self._nick = "" #nombre del jugador
|
||||
self._addr = "" #dirección del cliente
|
||||
self._jugada= "" #piedra/papel/tijera
|
||||
self._puntos= 0
|
||||
self._puertoCallback = 0
|
||||
|
||||
@property
|
||||
def nick(self):
|
||||
return self._nick
|
||||
|
||||
@property
|
||||
def addr(self):
|
||||
return self._addr
|
||||
|
||||
@property
|
||||
def jugada(self):
|
||||
return self._jugada
|
||||
|
||||
@property
|
||||
def puntos(self):
|
||||
return self._puntos
|
||||
|
||||
@property
|
||||
def puertoCallback(self):
|
||||
return self._puertoCallback
|
||||
|
||||
@property
|
||||
def libre(self):
|
||||
if self._nick == "":
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
|
||||
@property
|
||||
def sinJugar(self):
|
||||
if self._jugada == "":
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
|
||||
@nick.setter
|
||||
def nick(self, nombre):
|
||||
self._nick = nombre
|
||||
|
||||
@addr.setter
|
||||
def addr(self, nombre):
|
||||
self._addr = nombre
|
||||
|
||||
@jugada.setter
|
||||
def jugada(self, nombre):
|
||||
if nombre in ["piedra","papel","tijera",""]:
|
||||
self._jugada = nombre
|
||||
|
||||
@puntos.setter
|
||||
def puntos(self, nombre):
|
||||
self._puntos = nombre
|
||||
|
||||
@puertoCallback.setter
|
||||
def puertoCallback(self, puerto):
|
||||
self._puertoCallback= int(puerto)
|
||||
|
||||
def puntuar(self):
|
||||
print (self._puntos)
|
||||
self._puntos += 1
|
||||
|
||||
def arbitrar(self,otroJugador):
|
||||
#devuelve 0 si empate, -1 si gana otroJugador, 1 si gana el objeto actual
|
||||
if ((self.jugada =="piedra" and otroJugador.jugada =="tijera") or
|
||||
(self.jugada =="tijera" and otroJugador.jugada =="papel") or
|
||||
(self.jugada =="papel" and otroJugador.jugada =="piedra")):
|
||||
return 1
|
||||
elif ((otroJugador.jugada =="piedra" and self.jugada =="tijera") or
|
||||
(otroJugador.jugada =="tijera" and self.jugada =="papel") or
|
||||
(otroJugador.jugada =="papel" and self.jugada =="piedra")):
|
||||
return -1
|
||||
else:
|
||||
return 0
|
||||
|
||||
class ManejoCliente(threading.Thread):
|
||||
def __init__(self,clientAddress,clientsocket):
|
||||
threading.Thread.__init__(self)
|
||||
self.csocket = clientsocket
|
||||
self.cAddress = clientAddress
|
||||
self.puertoEscuchaCli = 0
|
||||
print ("Cliente conectado desde: ", self.cAddress)
|
||||
|
||||
def run(self):
|
||||
global numJugadaActual
|
||||
print ("Escuchando a peticiones de cliente: ", self.cAddress)
|
||||
#mensaje de bienvenida con el protocolo
|
||||
bienvenida ="#INSCRIBIR#nombre#puertoEscucha#\n#JUGADA#{piedra|papel|tijera}#\n#PUNTUACION#"
|
||||
self.csocket.send(bytes(bienvenida,'UTF-8'))
|
||||
|
||||
while True:
|
||||
data = self.csocket.recv(512).decode("utf_8")
|
||||
print ("Enviado desde cliente:<",data,">")
|
||||
subdatos = data.split("#")
|
||||
respuesta="#OK#"
|
||||
if subdatos[1] == "INSCRIBIR":
|
||||
if jugador1.libre:
|
||||
jugador1.nick = subdatos[2]
|
||||
jugador1.addr = self.cAddress
|
||||
jugador1.puertoCallback = subdatos[3]
|
||||
elif jugador2.libre:
|
||||
jugador2.nick = subdatos[2]
|
||||
jugador2.addr = self.cAddress
|
||||
jugador2.puertoCallback = subdatos[3]
|
||||
else:
|
||||
respuesta="#NOK#ya hay dos jugadores#"
|
||||
elif subdatos[1] == "JUGADA":
|
||||
#comprobra valor válido
|
||||
if subdatos[2] not in ["piedra","papel","tijera"]:
|
||||
respuesta="#NOK#valores válidos: piedra/papel/tijera#"
|
||||
#comprobar autenticidad IP+puerto registrados
|
||||
elif self.cAddress in [jugador1.addr, jugador2.addr]:
|
||||
#estamos con el jugador 1
|
||||
if self.cAddress == jugador1.addr:
|
||||
jugador1.jugada = subdatos[2]
|
||||
#estamos con el jugador 2
|
||||
else:
|
||||
jugador2.jugada = subdatos[2]
|
||||
respuesta="#OK#"
|
||||
#comprobamos si podemos arbitrar jugada
|
||||
with lock:
|
||||
if (not jugador1.sinJugar and not jugador2.sinJugar):
|
||||
#gana el 1
|
||||
if jugador1.arbitrar(jugador2)>0:
|
||||
jugador1.puntuar()
|
||||
resultado ="#OK#GANADOR:" + jugador1.nick + "#"
|
||||
#gana el 2
|
||||
elif jugador1.arbitrar(jugador2)<0:
|
||||
jugador2.puntuar()
|
||||
resultado ="#OK#GANADOR:" + jugador2.nick + "#"
|
||||
else:
|
||||
resultado ="#OK#EMPATE#"
|
||||
jugador1.jugada =""
|
||||
jugador2.jugada =""
|
||||
t1 = threading.Thread(target=self.comunicaResultadoClientes, args=(resultado,1))
|
||||
t2 = threading.Thread(target=self.comunicaResultadoClientes, args=(resultado,2))
|
||||
t1.start()
|
||||
t2.start()
|
||||
|
||||
#la ip+puerto del jugador no estaba en la partida
|
||||
else:
|
||||
respuesta="#NOK#el jugador no está en la partida#"
|
||||
elif subdatos[1] == "PUNTUACION":
|
||||
respuesta="#OK#" + jugador1.nick + ":" + str(jugador1.puntos) + "#" + jugador2.nick + ":" + str(jugador2.puntos) + "#"
|
||||
|
||||
self.csocket.send(bytes(respuesta,'UTF-8'))
|
||||
|
||||
def comunicaResultadoClientes(self, resultado, numJugador):
|
||||
|
||||
if numJugador == 1:
|
||||
puerto = jugador1.puertoCallback
|
||||
elif numJugador ==2:
|
||||
puerto = jugador2.puertoCallback
|
||||
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as cli:
|
||||
cli.connect((self.cAddress[0], puerto))
|
||||
cli.sendall(bytes(resultado,'UTF-8'))
|
||||
print ("resultado enviado a"+self.cAddress[0]+ ":"+cli.recv(1024).decode())
|
||||
|
||||
if __name__ == '__main__':
|
||||
jugador1 = Jugador()
|
||||
jugador2 = Jugador()
|
||||
lock = threading.Lock()
|
||||
HOST = ""
|
||||
PORT = 2000
|
||||
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||
server.bind((HOST, PORT))
|
||||
print("Servidor iniciado. Esperando clientes...")
|
||||
while True:
|
||||
server.listen(1)
|
||||
clientsock, clientAddress = server.accept()
|
||||
t = ManejoCliente(clientAddress, clientsock)
|
||||
t.start()
|
@ -0,0 +1,80 @@
|
||||
import socket
|
||||
import threading
|
||||
from tkinter import *
|
||||
|
||||
def conectarServidor(puertoCallback):
|
||||
global client
|
||||
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||
client.connect((SERVER, PORT))
|
||||
lblInfo["text"]= client.recv(1024).decode()
|
||||
t = threading.Thread(target=escucharRespuestas, args=(puertoCallback,))
|
||||
t.daemon=True
|
||||
t.start()
|
||||
|
||||
|
||||
def inscribir (puerto):
|
||||
global client
|
||||
client.sendall(bytes("#INSCRIBIR#"+entNombre.get() +"#"+puerto+"#",'UTF-8'))
|
||||
lblInfo["text"]= client.recv(1024).decode()
|
||||
|
||||
def enviarJugada(jugada):
|
||||
global client
|
||||
client.sendall(bytes("#JUGADA#"+jugada+"#",'UTF-8'))
|
||||
lblInfo["text"]= client.recv(1024).decode()
|
||||
|
||||
def consultaPuntos():
|
||||
global client
|
||||
client.sendall(bytes("#PUNTUACION#",'UTF-8'))
|
||||
lblInfo["text"]= client.recv(1024).decode()
|
||||
|
||||
def escucharRespuestas(puertoCallBack):
|
||||
global informacion
|
||||
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
|
||||
s.bind((SERVER, puertoCallBack))
|
||||
print("Escucha en callback")
|
||||
s.listen()
|
||||
while True:
|
||||
(cli,add) = s.accept()
|
||||
with cli:
|
||||
data = cli.recv(512).decode("utf_8")
|
||||
print ("Enviado desde cliente:<",data,">")
|
||||
informacion = data
|
||||
#lblInfo["text"]=informacion esta línea no funcionaría ya que no se puede modificar el label desde este hilo
|
||||
fPPT.event_generate("<<er>>",when="tail")
|
||||
cli.send(bytes("#OK#",'UTF-8'))
|
||||
|
||||
def escribirResolucion(*args):
|
||||
lblInfo["text"]=informacion
|
||||
|
||||
|
||||
#if __name__ == '__main__':
|
||||
SERVER = "127.0.0.1"
|
||||
PORT = 2000
|
||||
client = None
|
||||
informacion =""
|
||||
fPPT = Tk()
|
||||
fPPT.title("Piedra-Papel-Tijera")
|
||||
fPPT.geometry("300x300")
|
||||
fPPT.resizable(True, True)
|
||||
lblInfo = Label(fPPT, text=informacion )
|
||||
lblInfo.place(x=0,y=230)
|
||||
lblPuerto = Label(fPPT, text="Puerto de escucha:")
|
||||
lblPuerto.place(x=0,y=50)
|
||||
entPuerto = Entry(fPPT,)
|
||||
entPuerto.place(x = 110,y=50, width=30)
|
||||
btnConn = Button(fPPT, text = 'Conectar', command = lambda: conectarServidor(int(entPuerto.get())))
|
||||
btnConn.place(x = 150,y = 50)
|
||||
entNombre = Entry(fPPT)
|
||||
entNombre.place(x = 20,y=100)
|
||||
btnInscribir = Button(fPPT, text = 'Inscribir', command = lambda: inscribir(entPuerto.get()))
|
||||
btnInscribir.place(x = 150,y = 100)
|
||||
btnPiedra = Button(fPPT, text = 'piedra', command = lambda: enviarJugada("piedra"))
|
||||
btnPiedra.place(x = 50,y = 150)
|
||||
btnPapel = Button(fPPT, text = 'papel', command = lambda: enviarJugada("papel"))
|
||||
btnPapel.place(x = 100,y = 150)
|
||||
btnTijera = Button(fPPT, text = 'tijera', command = lambda: enviarJugada("tijera"))
|
||||
btnTijera.place(x = 150,y = 150)
|
||||
btnPuntos = Button(fPPT, text = 'Puntuación', command =consultaPuntos)
|
||||
btnPuntos.place(x = 150,y = 200)
|
||||
fPPT.bind("<<er>>",escribirResolucion)
|
||||
fPPT.mainloop()
|
@ -0,0 +1,25 @@
|
||||
import ftplib
|
||||
#creadenciales FTP, la contraseña la cambian cada cierto tiempo
|
||||
FTP_HOST = "ftp.dlptest.com"
|
||||
FTP_USER = "dlpuser"
|
||||
FTP_PASS = "rNrKYTX9g7z3RgJRmxWuGHbeu"
|
||||
|
||||
def listCallback(line):
|
||||
print(line)
|
||||
|
||||
# conexión al servidor de FTP
|
||||
ftp = ftplib.FTP(FTP_HOST, FTP_USER, FTP_PASS)
|
||||
#forzar codificación UNICODE
|
||||
ftp.encoding = "utf-8"
|
||||
welcomeMessage = ftp.getwelcome()
|
||||
print(welcomeMessage)
|
||||
|
||||
#se puede obtener la respuesta a través de una función de callback
|
||||
respMessage = ftp.retrlines("LIST", listCallback)
|
||||
#también se puede obtener el resultado de forma directa
|
||||
#respMessage = ftp.retrlines("LIST")
|
||||
print ("-----------------------------")
|
||||
print(respMessage)
|
||||
|
||||
#cerrar la conexión
|
||||
ftp.quit()
|
@ -0,0 +1,29 @@
|
||||
import ftplib
|
||||
#creadenciales FTP, la contraseña la cambian cada cierto tiempo
|
||||
FTP_HOST = "ftp.dlptest.com"
|
||||
FTP_USER = "dlpuser"
|
||||
FTP_PASS = "rNrKYTX9g7z3RgJRmxWuGHbeu"
|
||||
|
||||
def listCallback(line):
|
||||
print(line)
|
||||
|
||||
try:
|
||||
# conexión al servidor de FTP
|
||||
ftp = ftplib.FTP(FTP_HOST, FTP_USER, FTP_PASS)
|
||||
#forzar codificación UNICODE
|
||||
ftp.encoding = "utf-8"
|
||||
welcomeMessage = ftp.getwelcome()
|
||||
print(welcomeMessage)
|
||||
|
||||
#fichero a subir
|
||||
filename = "subido.txt"
|
||||
with open(filename, "rb") as file:
|
||||
# Usamos comando STOR para subirlo
|
||||
ftp.storbinary(f"STOR {filename}", file)
|
||||
# listamos el contenido para comprobar
|
||||
ftp.dir(listCallback)
|
||||
|
||||
#cerrar la conexión
|
||||
ftp.quit()
|
||||
except ftplib.all_errors as e:
|
||||
errorcode_string = str(e).split(None, 1)[0]
|
@ -0,0 +1,25 @@
|
||||
import ftplib
|
||||
#creadenciales FTP, la contraseña la cambian cada cierto tiempo
|
||||
FTP_HOST = "ftp.dlptest.com"
|
||||
FTP_USER = "dlpuser"
|
||||
FTP_PASS = "rNrKYTX9g7z3RgJRmxWuGHbeu"
|
||||
|
||||
try:
|
||||
# conexión al servidor de FTP
|
||||
ftp = ftplib.FTP(FTP_HOST, FTP_USER, FTP_PASS)
|
||||
#forzar codificación UNICODE
|
||||
ftp.encoding = "utf-8"
|
||||
welcomeMessage = ftp.getwelcome()
|
||||
print(welcomeMessage)
|
||||
|
||||
#bajamos el fichero subido anteriormente y lo renombramos a bajado.txt
|
||||
fichero_enServidor = "subido.txt"
|
||||
fichero_local = "bajado.txt"
|
||||
with open(fichero_local, "wb") as file:
|
||||
# usamos el comando RETR para descargar
|
||||
ftp.retrbinary(f"RETR {fichero_enServidor}", file.write)
|
||||
|
||||
#cerrar la conexión
|
||||
ftp.quit()
|
||||
except ftplib.all_errors as e:
|
||||
errorcode_string = str(e).split(None, 1)[0]
|
@ -0,0 +1,32 @@
|
||||
import smtplib
|
||||
from email.mime.multipart import MIMEMultipart
|
||||
from email.mime.text import MIMEText
|
||||
|
||||
body = '''Hola desde el manual de threads&sockets
|
||||
Este es un correo simple para probar que podemos enviar emails a graves mediante python
|
||||
Saludos
|
||||
'''
|
||||
#direccion, contraseña y destinatario
|
||||
enviado_por = 'jlcarnerosobrino@gmail.com'
|
||||
password = 'poner aqui la contraseña'
|
||||
to = 'jlcarnerosobrino@gmail.com'
|
||||
|
||||
#Establecimiento MIME
|
||||
mensaje = MIMEMultipart()
|
||||
mensaje['From'] = enviado_por
|
||||
mensaje['To'] = to
|
||||
mensaje['Subject'] = 'Prueba'
|
||||
|
||||
#Cuerpo y adjuntos para el correo
|
||||
mensaje.attach(MIMEText(body, 'plain'))
|
||||
#Sesión SMTP para el envío del correo
|
||||
try:
|
||||
session = smtplib.SMTP('smtp.gmail.com', 587) #use gmail with port
|
||||
session.starttls() #enable security
|
||||
session.login(enviado_por, password) #login with mail_id and password
|
||||
text = mensaje.as_string()
|
||||
session.sendmail(enviado_por, to, text)
|
||||
session.quit()
|
||||
print('Mensaje enviado')
|
||||
except:
|
||||
print ('Algo fue incorrecto...')
|
@ -0,0 +1,36 @@
|
||||
import imaplib
|
||||
|
||||
user = 'jlcarnerosobrino@gmail.com'
|
||||
password = 'poner aqui la contraseña'
|
||||
imap_url = 'imap.gmail.com'
|
||||
|
||||
|
||||
def search(key, value, con):
|
||||
result, data = con.search(None, key, '"{}"'.format(value))
|
||||
return data
|
||||
|
||||
def get_emails(result_bytes):
|
||||
msgs = []
|
||||
for num in result_bytes[0].split():
|
||||
typ, data = con.fetch(num, '(RFC822)')
|
||||
msgs.append(data)
|
||||
return msgs
|
||||
|
||||
con = imaplib.IMAP4_SSL(imap_url)
|
||||
con.login(user, password)
|
||||
con.select('Inbox')
|
||||
msgs = get_emails(search('FROM', 'jlcarnerosobrino@gmail.com', con))
|
||||
|
||||
for msg in msgs[::-1]:
|
||||
for sent in msg:
|
||||
if type(sent) is tuple:
|
||||
content = str(sent[1], 'utf-8')
|
||||
data = str(content)
|
||||
try:
|
||||
indexstart = data.find("ltr")
|
||||
data2 = data[indexstart + 5: len(data)]
|
||||
indexend = data2.find("</div>")
|
||||
print(data2[0: indexend])
|
||||
|
||||
except UnicodeEncodeError as e:
|
||||
pass
|
@ -0,0 +1,15 @@
|
||||
import webbrowser
|
||||
|
||||
url1 = 'https://www.marcombo.com/'
|
||||
url2 = 'https://www.amazon.es/'
|
||||
url3 = 'https://www.google.com/'
|
||||
|
||||
# Abrir la URL en una nueva pestaña si ya existe una ventana del navegador abierta
|
||||
webbrowser.open_new_tab(url1)
|
||||
|
||||
# Abrir la URL en una nueva ventana, si es posible
|
||||
webbrowser.open_new(url2)
|
||||
|
||||
edge_path = "C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe"
|
||||
webbrowser.register('edge', None, webbrowser.BackgroundBrowser(edge_path))
|
||||
webbrowser.get('edge').open_new(url3)
|
@ -0,0 +1,19 @@
|
||||
from urllib import request
|
||||
|
||||
response = request.urlopen('http://www.python.org')
|
||||
|
||||
print('RESPONSE:', response)
|
||||
print('CODIGO HTTP: ', response.getcode())
|
||||
print('URL :', response.geturl())
|
||||
|
||||
headers = response.info()
|
||||
print('DATE :', headers['date'])
|
||||
print('HEADERS :')
|
||||
print('---------')
|
||||
print(headers)
|
||||
|
||||
print('BODY :')
|
||||
print('---------')
|
||||
for _ in range (20):
|
||||
linea = response.readline().decode('utf-8')
|
||||
print(linea)
|
@ -0,0 +1,19 @@
|
||||
from urllib import request
|
||||
import json
|
||||
ciudad="Ourense"
|
||||
api_key = "obtener una api-key!!!!!"
|
||||
unidades ="metric"
|
||||
url = "https://api.openweathermap.org/data/2.5/weather?q=%s&units=%s&appid=%s" % (ciudad, unidades, api_key)
|
||||
#print (url)
|
||||
response = request.urlopen(url)
|
||||
http_body = response.readline().decode('utf-8')
|
||||
print (http_body)
|
||||
#codificar la respuesta a json
|
||||
data = json.loads(http_body)
|
||||
#print(data)
|
||||
#acceso al bloque main
|
||||
main = data["main"]
|
||||
#acceso a temperatura
|
||||
temperatura = main["temp"]
|
||||
#data = response.json()["main"]["temp"]
|
||||
print ("La temperatura de " + ciudad + "es:" + str(temperatura))
|
@ -0,0 +1,16 @@
|
||||
from urllib import parse
|
||||
from urllib import request
|
||||
import json
|
||||
|
||||
#diccionario de datos a enviar
|
||||
datos_consulta = {'cod-persona':245}
|
||||
#codificación de los datos
|
||||
encoded_args = parse.urlencode(datos_consulta).encode('utf-8')
|
||||
#endpoint de nuestra petición
|
||||
url = 'https://psp-api.free.beeceptor.com/persona'
|
||||
#composición de la petición con la url y los datos POST a insertar en el header
|
||||
response = request.urlopen(url, encoded_args).read().decode('utf-8')
|
||||
#print(response)
|
||||
datos = json.loads(response)
|
||||
print ("Nombre: ", datos["nombre"])
|
||||
print ("Edad: ", datos["edad"])
|
@ -0,0 +1 @@
|
||||
hola, estoy haciendo pruebas con FTP
|
@ -0,0 +1 @@
|
||||
hola, estoy haciendo pruebas con FTP
|
Binary file not shown.
@ -0,0 +1,13 @@
|
||||
import hashlib
|
||||
|
||||
#hash co md5 de un texto
|
||||
Texto = "Texto de prueba".encode("utf-8")
|
||||
HashCode= hashlib.md5(Texto).hexdigest()
|
||||
print("El hash de %s es: %s" % (Texto , HashCode))
|
||||
|
||||
#hash con md5 de un fichero
|
||||
filename = input("Nombre de fichero: ")
|
||||
with open(filename,"rb") as f:
|
||||
bytes = f.read()
|
||||
HashCode = hashlib.md5(bytes).hexdigest();
|
||||
print("El hash del fichero: %s es:\n%s" % (filename ,HashCode))
|
@ -0,0 +1,28 @@
|
||||
alfabeto = 'ABCDEFGHIJKLMNÑOPQRSTUVWXYZ0123456789'
|
||||
alfabetoCifrado = 'KLMNÑOPQRSTUVWXYZ0123456789ABCDEFGHIJ'
|
||||
|
||||
def cifrarCesar(men):
|
||||
mensajeCifrado= ""
|
||||
men = men.upper()
|
||||
for caracter in men:
|
||||
if caracter in alfabeto:
|
||||
index = alfabeto.index(caracter)
|
||||
mensajeCifrado += alfabetoCifrado[index]
|
||||
else: #si el carácter no existeen el alfabeto
|
||||
mensajeCifrado += caracter
|
||||
return mensajeCifrado
|
||||
|
||||
def descifrarCesar (menCif):
|
||||
mensajeDescifrado= ""
|
||||
for caracter in menCif:
|
||||
if caracter in alfabeto:
|
||||
index = alfabetoCifrado.index(caracter)
|
||||
mensajeDescifrado += alfabeto[index]
|
||||
else: #si el carácter no existeen el alfabeto
|
||||
mensajeDescifrado += caracter
|
||||
return (mensajeDescifrado)
|
||||
|
||||
print (cifrarCesar('En un lugar de la Mancha, vivía!'))
|
||||
print (descifrarCesar('ÑW 4W U4PK1 NÑ UK VKWMQK, 5R5ÍK!'))
|
||||
|
||||
assert (cifrarCesar("I love you!")=="R UY5Ñ 8Y4!")
|
@ -0,0 +1,28 @@
|
||||
from Crypto.Cipher import DES
|
||||
import base64
|
||||
import os
|
||||
|
||||
mensajeOriginal = "Visita GALICIA: el paraíso".encode("utf-8")
|
||||
print ("Mensaja original:", mensajeOriginal.decode("utf-8"))
|
||||
|
||||
key = b"abc123.." #establecemos una clave
|
||||
iv = os.urandom(8) #generamos aleatoriamente un iv
|
||||
|
||||
print (iv)
|
||||
|
||||
#instanciamos un nuevo objeto DES
|
||||
cipher = DES.new(key, DES.MODE_OFB,iv=iv)
|
||||
#ciframos los datos
|
||||
bytesCifrados = cipher.encrypt(mensajeOriginal)
|
||||
print ("Bytes cifrados: ", bytesCifrados)
|
||||
#para imprimir una mejor representación
|
||||
mensajeCifrado = base64.b64encode(bytesCifrados).decode("utf-8")
|
||||
print ("Mensaje Cifrado:", mensajeCifrado)
|
||||
|
||||
#es necesario un nuevo objeto para descifrar
|
||||
cipher = DES.new(key, DES.MODE_OFB,iv = iv)
|
||||
#desciframos usando la misma key e iv
|
||||
mensajeDescifrado = cipher.decrypt(bytesCifrados)
|
||||
print ("Mensaje: ", mensajeDescifrado.decode())
|
||||
|
||||
assert (mensajeOriginal == mensajeDescifrado)
|
@ -0,0 +1,32 @@
|
||||
from Crypto.Cipher import DES3
|
||||
from Crypto.Random import get_random_bytes
|
||||
import base64
|
||||
import os
|
||||
|
||||
mensajeOriginal = "Visita GALICIA: el paraíso".encode("utf-8")
|
||||
print ("Mensaja original:", mensajeOriginal.decode("utf-8"))
|
||||
|
||||
while True:
|
||||
try:
|
||||
key = DES3.adjust_key_parity(get_random_bytes(24))
|
||||
break
|
||||
except ValueError:
|
||||
pass
|
||||
iv = os.urandom(8) #generamos aleatoriamente un iv
|
||||
|
||||
#instanciamos un nuevo objeto DES
|
||||
cipher = DES3.new(key, DES3.MODE_CFB,iv=iv)
|
||||
#ciframos los datos
|
||||
bytesCifrados = cipher.encrypt(mensajeOriginal)
|
||||
print ("Bytes cifrados: ", bytesCifrados)
|
||||
#para imprimir una mejor representación
|
||||
mensajeCifrado = base64.b64encode(bytesCifrados).decode("utf-8")
|
||||
print ("Mensaje Cifrado:", mensajeCifrado)
|
||||
|
||||
#es necesario un nuevo objeto para descifrar
|
||||
cipher = DES3.new(key, DES3.MODE_CFB,iv = iv)
|
||||
#desciframos usando la misma key e iv
|
||||
mensajeDescifrado = cipher.decrypt(bytesCifrados)
|
||||
print ("Mensaje: ", mensajeDescifrado.decode())
|
||||
|
||||
assert (mensajeOriginal == mensajeDescifrado)
|
@ -0,0 +1,29 @@
|
||||
from Crypto.Cipher import DES3
|
||||
from hashlib import md5
|
||||
|
||||
def encriptar (fileOrigen, fileDestino, key):
|
||||
cipher = DES3.new(key, DES3.MODE_EAX, nonce=b'0')
|
||||
with open(fileOrigen, 'rb') as input_file:
|
||||
file_bytes = input_file.read()
|
||||
enc_file_bytes = cipher.encrypt(file_bytes)
|
||||
|
||||
with open(fileDestino, 'wb') as output_file:
|
||||
output_file.write(enc_file_bytes)
|
||||
|
||||
def desencriptar (fileOrigen, fileDestino, key):
|
||||
cipher = DES3.new(key, DES3.MODE_EAX, nonce=b'0')
|
||||
with open(fileOrigen, 'rb') as input_file:
|
||||
file_bytes = input_file.read()
|
||||
dec_file_bytes = cipher.decrypt(file_bytes)
|
||||
|
||||
with open(fileDestino, 'wb') as output_file:
|
||||
output_file.write(dec_file_bytes)
|
||||
|
||||
|
||||
key = "abc123."
|
||||
|
||||
key_hash = md5(key.encode('ascii')).digest() # 16-byte key
|
||||
tdes_key = DES3.adjust_key_parity(key_hash)
|
||||
|
||||
encriptar("textoPlano.txt","textoEncriptado.txt",tdes_key)
|
||||
desencriptar("textoEncriptado.txt", "textoDesencriptado.txt",tdes_key)
|
@ -0,0 +1,21 @@
|
||||
from Crypto.Cipher import AES
|
||||
|
||||
mensajeOriginal = b"Hola, algoritmo AES"
|
||||
key = b'Clave de 16 Byte'
|
||||
print ("Original: ", mensajeOriginal)
|
||||
|
||||
#cifrar
|
||||
cipher = AES.new(key, AES.MODE_EAX) #sin iv
|
||||
mensajeCifrado, tag = cipher.encrypt_and_digest(mensajeOriginal)
|
||||
print ("Cifrado: ", mensajeCifrado)
|
||||
|
||||
#descifrar
|
||||
cipher = AES.new(key, AES.MODE_EAX, nonce=cipher.nonce)
|
||||
mensajeDescifrado = cipher.decrypt(mensajeCifrado)
|
||||
try:
|
||||
cipher.verify(tag)
|
||||
print("Descifrado: ", mensajeDescifrado)
|
||||
except ValueError:
|
||||
print("Clave incorrecta o mensaje corrupto")
|
||||
|
||||
assert (mensajeDescifrado == mensajeDescifrado)
|
@ -0,0 +1,33 @@
|
||||
from Crypto.Cipher import AES
|
||||
from Crypto.Random import get_random_bytes
|
||||
|
||||
key = get_random_bytes(32) # Use a stored / generated key
|
||||
MensajeOriginal = 'Pureba de encriptación con AES+key+iv' # This is your data
|
||||
print ("Mensaje original: ", MensajeOriginal)
|
||||
|
||||
#Convertir un string a un objeto de bytes codificado UNICODE
|
||||
data = MensajeOriginal.encode('utf-8')
|
||||
|
||||
# Encriptación
|
||||
cipher_encrypt = AES.new(key, AES.MODE_CFB)
|
||||
BytesEncriptados = cipher_encrypt.encrypt(data)
|
||||
|
||||
# Nuestro datos y vector de inicialización
|
||||
iv = cipher_encrypt.iv
|
||||
MensajeEncriptado = BytesEncriptados
|
||||
print ("Mensaje encriptado: ", MensajeEncriptado)
|
||||
print ("Vector de inicialización: ", iv)
|
||||
|
||||
|
||||
# Desencriptación
|
||||
cipher_decrypt = AES.new(key, AES.MODE_CFB, iv=iv)
|
||||
BytesDesncriptados = cipher_decrypt.decrypt(MensajeEncriptado)
|
||||
|
||||
# Conversión de bytes a string
|
||||
MensajeDesencriptado = BytesDesncriptados.decode('utf-8')
|
||||
print ("Mensaje desencriptado: ", MensajeDesencriptado)
|
||||
|
||||
#probamos coindidencia original-encriptado-desencriptado
|
||||
assert MensajeOriginal == MensajeDesencriptado, 'El mensaje original no coincide con la encrptación-desencriptación'
|
||||
|
||||
#https://nitratine.net/blog/post/python-encryption-and-decryption-with-pycryptodome/
|
@ -0,0 +1,23 @@
|
||||
from Crypto.PublicKey import RSA
|
||||
|
||||
codigoClave = "Unguessable" #conraseña
|
||||
key = RSA.generate(2048)
|
||||
#obtener clave privada
|
||||
encrypted_key = key.export_key(passphrase=codigoClave, pkcs=8,
|
||||
protection="scryptAndAES128-CBC")
|
||||
|
||||
file_out = open("rsa_key_privada.bin", "wb")
|
||||
file_out.write(encrypted_key)
|
||||
file_out.close()
|
||||
|
||||
print ("Clave privada:\n",encrypted_key)
|
||||
|
||||
#obtener clave pública
|
||||
print("Clave pública:\n",key.publickey().export_key())
|
||||
|
||||
#obtener la clave pública en base a la lectura del fichero de clave privada
|
||||
encoded_key = open("rsa_key_privada.bin", "rb").read()
|
||||
key = RSA.import_key(encoded_key, passphrase=codigoClave)
|
||||
|
||||
print("Clave pública:\n",key.publickey().export_key())
|
||||
print(key)
|
@ -0,0 +1,12 @@
|
||||
from Crypto.PublicKey import RSA
|
||||
|
||||
key = RSA.generate(2048)
|
||||
private_key = key.export_key()
|
||||
file_out = open("privada_usuario_A.pem", "wb")
|
||||
file_out.write(private_key)
|
||||
file_out.close()
|
||||
|
||||
public_key = key.publickey().export_key()
|
||||
file_out = open("publica_usuario_A.pem", "wb")
|
||||
file_out.write(public_key)
|
||||
file_out.close()
|
@ -0,0 +1,19 @@
|
||||
from Crypto.PublicKey import RSA
|
||||
from Crypto.Random import get_random_bytes
|
||||
from Crypto.Cipher import AES, PKCS1_OAEP
|
||||
|
||||
data = "La criptografía a través en Python a través de <<pycryptodome>> es consistente".encode("utf-8")
|
||||
file_out = open("Datos_Encriptados.bin", "wb")
|
||||
|
||||
recipient_key = RSA.import_key(open("publica_usuario_A.pem").read())
|
||||
session_key = get_random_bytes(16)
|
||||
|
||||
# Encriptar la sesión con la clave pública del usuario_A
|
||||
cipher_rsa = PKCS1_OAEP.new(recipient_key)
|
||||
enc_session_key = cipher_rsa.encrypt(session_key)
|
||||
|
||||
# Encriptar los datos con la sesión de AES
|
||||
cipher_aes = AES.new(session_key, AES.MODE_EAX)
|
||||
ciphertext, tag = cipher_aes.encrypt_and_digest(data)
|
||||
[ file_out.write(x) for x in (enc_session_key, cipher_aes.nonce, tag, ciphertext) ]
|
||||
file_out.close()
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue