Estuve creando un cliente y servidor, el código que estoy dejando es el del cliente, que se conecta a al servidor y luego se queda a la escucha de una orden, la única a la que responde ahora mismo es a la de tomar un screenshot y enviarla hacia al servidor, al principio el servidor nunca dejaba de recibir información por lo que se quedaba trabado, luego investigando descubrí la instrucción shutdown() que le indicaba al servidor que ya no estaba recibiendo información así podía recibir la imagen e ingresar otra orden. Mi problema es que s.shutdown(socket.SHUT_WR) lo que hace es cerrar uno de los lados de la conexión impidiéndole al cliente enviar información a través del socket así que cuando nuevamente doy la orden de tomar un screenshot el cliente la recibe pero no puede enviar la imagen, saben alguna solución o una forma de "reabrir" el socket para nuevamente enviar información hacia al servidor?
Dejo también el código del servidor, por si sirve de algo
Código [Seleccionar]
import socket
import pyscreenshot
HOST = 'localhost'
PORT = 4444
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.connect((HOST, PORT))
print('Conexión establecida')
while True:
orden = s.recv(1024)
if orden == b'screenshot':
#tomo un pantallazo y lo guardo en formato png
img = pyscreenshot.grab()
img.save("captura.png")
#abro la imagen en modo lectura binaria para enviarla
f = open("captura.png", "rb")
imagen = f.read()
while imagen:
s.send(imagen)
imagen = f.read()
# se termina el envio de la imagen
print("Imagen enviada")
s.shutdown(socket.SHUT_WR)
f.close()
del(f)
Dejo también el código del servidor, por si sirve de algo
Código [Seleccionar]
import socket
import datetime
fechayhora = datetime.datetime.now().strftime('%Y-%m-%d %H-%M-%S')
HOST = 'localhost'
PORT = 4444
socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
socket.bind((HOST, PORT))
socket.listen()
print('Servidor a la escucha...')
conn, addr = socket.accept()
print('Conexión entrante de ' + str(addr))
with conn:
while True:
orden = input('Ingresa una orden: ')
orden = orden.lower()
if orden == 'screenshot':
conn.send(b'screenshot')
#recibo la imagen enviada desde el cliente
f = open('capturas\\screenshot_' + str(fechayhora) + '.png', 'wb')
imagen = conn.recv(1024)
while imagen:
f.write(imagen)
imagen = conn.recv(1024)
f.close()
print('Imagen recibida')
elif orden == 'salir':
quit()