From 4f3fde96bc51abf2da10437d5ab836e1495c99e2 Mon Sep 17 00:00:00 2001 From: CactiChameleon9 Date: Mon, 15 Mar 2021 07:44:14 +0000 Subject: [PATCH] add stuff for image sending --- Server/mirrorServerScreen.py | 110 +++++++++++++++++++++++++++++++++++ Server/screen.jpg | Bin 0 -> 51838 bytes test.py | 58 ++++++++++++++++++ testpillow.py | 11 ++++ 4 files changed, 179 insertions(+) create mode 100644 Server/mirrorServerScreen.py create mode 100644 Server/screen.jpg create mode 100644 test.py create mode 100644 testpillow.py diff --git a/Server/mirrorServerScreen.py b/Server/mirrorServerScreen.py new file mode 100644 index 0000000..54023d7 --- /dev/null +++ b/Server/mirrorServerScreen.py @@ -0,0 +1,110 @@ +import socket +import os +import tkinter +from PIL import ImageGrab +import time + + + +SEPARATOR = "" +BUFFER_SIZE = 4096 # send 4096 bytes each time step + + +# the ip address or hostname of the server, the receiver +# the port, let's use 5001 +host = "0.tcp.ngrok.io" +port = 15552 + +# host = "0.0.0.0" +# port = 5001 + +# the name of file we want to send, make sure it exists +filename = "screen.jpg" +# get the file size +filesize = os.path.getsize(filename) + +# create the client socket +s = socket.socket() +print(f"[+] Connecting to {host}:{port}") +s.connect((host, port)) +print("[+] Connected.") +# send the filename and filesize +#s.send("HELLO".encode()) +s.send(f"{filename}{SEPARATOR}{filesize}".encode()) + + +def sendfile(): + # start sending the file + with open(filename, "rb") as f: + while True: + # read the bytes from the file + bytes_read = f.read(BUFFER_SIZE) + if not bytes_read: + # file transmitting is done + break + # we use sendall to assure transimission in + # busy networks + s.sendall(bytes_read) + # close the socket + #s.close() + +#----------------------------------------------------------- + +bbox=(0,0,tkinter.Tk().winfo_screenwidth(),tkinter.Tk().winfo_screenheight()) +while True: + image = ImageGrab.grab(bbox) + image.save('screen.jpg',optimize=True,quality=30) + print("screenshot taken") + sendfile() + time.sleep(0.2) + s.send("FILEDONE".encode()) + +# def on_press(key): +# + # if str(key) == 'Key.enter': + # text_file = open("data.txt", "w") + # text_file.write("\n") + # text_file.close() + # sendfile() + # + # elif str(key) == 'Key.space': + # text_file = open("data.txt", "w") + # text_file.write(" ") + # text_file.close() + # sendfile() +# + # elif str(key) == 'Key.backspace': + # print("Invalid") +# + # + # else: + # text_file = open("data.txt", "w") + # text_file.write(('{}'.format(key)).replace("'", "")) + # text_file.close() + # sendfile() +# + # +# +# def on_release(key): +# + # #print('Key {} released.'.format(key)) +# + # if str(key) == 'Key.esc': +# + # print('Exiting...') +# + # return False +# + # +# +# with keyboard.Listener( +# + # on_press = on_press, +# + # on_release = on_release) as listener: +# + # listener.join() + + +#----------------------------------------- + diff --git a/Server/screen.jpg b/Server/screen.jpg new file mode 100644 index 0000000000000000000000000000000000000000..75677c0b15270cdfbf1920c2d7c54dbcdb6f6b55 GIT binary patch literal 51838 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 literal 0 HcmV?d00001 diff --git a/test.py b/test.py new file mode 100644 index 0000000..b3a73a6 --- /dev/null +++ b/test.py @@ -0,0 +1,58 @@ +import socket +import os + +# device's IP address +SERVER_HOST = "0.0.0.0" #(socket.gethostbyname(socket.gethostname())) +SERVER_PORT = 5001 +# receive 4096 bytes each time +BUFFER_SIZE = 4096 +SEPARATOR = "" +# create the server socket +# TCP socket +s = socket.socket() +# bind the socket to our local address +s.bind((SERVER_HOST, SERVER_PORT)) +# enabling our server to accept connections +# 5 here is the number of unaccepted connections that +# the system will allow before refusing new connections +s.listen(5) +print(f"[*] Listening as {SERVER_HOST}:{SERVER_PORT}") +# accept connection if there is any +client_socket, address = s.accept() +# if below code is executed, that means the sender is connected +print(f"[+] {address} is connected.") +# receive the file infos +# receive using client socket, not server socket +received = client_socket.recv(BUFFER_SIZE).decode() +filename, filesize = received.split(SEPARATOR) +# remove absolute path if there is +filename = os.path.basename(filename) +# convert to integer +filesize = int(filesize) +# start receiving the file from the socket +# and writing to the file stream + +#with open(filename, "wb") as f: + +while True: + # read 1024 bytes from the socket (receive) + bytes_read = client_socket.recv(BUFFER_SIZE) + if not bytes_read: + # nothing is received + # file transmitting is done take another time + break + # write to the file the bytes we just received + try: + hello = bytes_read.decode() + os.remove(filename) + print("I am deleting the file") + except: + f = open(filename, 'ab') + f.write(bytes_read) + print("I am adding to the file") + f.close() + +# close the client socket +#client_socket.close() +# close the server socket +#s.close() diff --git a/testpillow.py b/testpillow.py new file mode 100644 index 0000000..f478816 --- /dev/null +++ b/testpillow.py @@ -0,0 +1,11 @@ +import tkinter +from PIL import ImageGrab + +bbox=(0,0,tkinter.Tk().winfo_screenheight(),tkinter.Tk().winfo_screenwidth()) +image = ImageGrab.grab(bbox) +image.save('sc.jpg',optimize=True,quality=30) + +# from PIL import ImageGrab +# image = ImageGrab.grab(bbox=(0,0,700,800)) +# image.save('sc.jpg',optimize=True,quality=30) +