远程桌面监控系统
2017-11-22 11:21
295 查看
一 代码
服务器:
客户端:
二 运行结果
大小: 84 KB
查看图片附件
服务器:
import tkinter import socket import time import threading import struct from PIL import Image, ImageTk def updateCanvas(canvas): global imageId sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.bind(('', 10600)) sock.listen(1) while running.get() == 1: #自适应当前监控窗口大小 width = canvas.winfo_width() height = canvas.winfo_height() conn, addr = sock.accept() tempImageBytes = b'' #图像字节数量 len_head = struct.calcsize('I128sI') data = conn.recv(len_head) length, size ,sizeLength= struct.unpack('I128sI',data) length = int(length) rest = length bufferSize = 1024*10 size = eval(size[:int(sizeLength)]) while running.get() == 1: if rest > bufferSize: data = conn.recv(1024*10) else: data = conn.recv(rest) tempImageBytes += data rest = rest - len(data) #远程桌面截图接收完成,显示图像 if rest == 0: tempImage = Image.frombytes('RGB', size, tempImageBytes) tempImage = tempImage.resize((width,height)) #tempImage.save('temp.png') tempImage = ImageTk.PhotoImage(tempImage) #清除上一个截图 try: canvas.delete(imageId) except: pass imageId = canvas.create_image(width//2, height//2, image=tempImage) #canvas.update() #通知客户端可以发送下一个截图 conn.send(b'ok') print('ok') break conn.close() root = tkinter.Tk() #主程序窗口位置和大小 root.geometry('1920x1080+0+0') width = 1920 height = 1080 root.title('远程桌面监考系统v1.0---cakin24') #用来表示监控软件是否运行的变量 running = tkinter.IntVar(root, 1) #关闭监控窗口时触发的消息处理代码 def closeWindow(): running.set(0) root.destroy() root.protocol('WM_DELETE_WINDOW', closeWindow) canvas = tkinter.Canvas(root, width=width, height=height) canvas.pack(fill=tkinter.BOTH, expand=tkinter.YES) #使用子线程刷新监控窗口 t = threading.Thread(target=updateCanvas, args=(canvas,)) #主线程关闭时强制关闭刷新窗口的子线程 t.daemon = True t.start() root.mainloop()
客户端:
import socket import struct from time import sleep from PIL import ImageGrab while True: try: sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #假设监控端主机IP地址为192.168.0.103,并监听10600端口 sock.connect(('192.168.0.105', 10600)) #本地全屏幕截图 im = ImageGrab.grab() size = im.size #发本地截图转换为字节串进行发送 imageBytes = im.tobytes() #发送字节串总长度和图像大小 fhead=struct.pack('I128sI',len(imageBytes),str(size).encode(),len(str(size).encode())) sock.send(fhead) rest = len(imageBytes) bufferSize = 1024*10 while True: if rest > bufferSize: temp = imageBytes[:bufferSize] imageBytes = imageBytes[bufferSize:] else: temp = imageBytes[:] sock.send(temp) rest = rest - len(temp) #本次截图发送完成 if rest == 0: if sock.recv(100) == b'ok': print('ok') break sock.close() except: print('无法连接监控端')
二 运行结果
大小: 84 KB
查看图片附件
相关文章推荐
- 如何从Web浏览器远程监控Linux服务器和桌面系统?
- Windows 2008 r2 64位系统修改远程桌面端口方法
- windows下使用远程桌面连接到linux系统下
- windows使用Xmanager远程桌面控制linux系统
- 工业4.0时代,您需要的是高性价工业物联网智能网关,PLC远程监控,PLC远程维护,系统数据采集,一个都不能少。
- Win7 旗舰版系统中实现多用户远程桌面的设置
- Javafx实现远程系统监控
- 【开发日记】"门没关好”之树莓派装系统以及使用笔记本电脑远程桌面登录树莓派
- windows2003远程桌面退出后系统自动注销程序关闭的解决方法
- 为树莓派(Raspberry pi 2)安装raspbian系统,并用windows自带的远程桌面连接登录
- C#实现简单远程控制及桌面监控功能(客户端)
- 实战ganglia分布式的监控系统(1)——监控主机与远程主机
- 为树莓派(Raspberry pi 2)安装raspbian系统,并用windows自带的远程桌面连接登录
- JMX实现远程服务器Tomcat系统监控之二
- 使用Xmanager远程桌面LINUX系统
- 远程win10系统桌面时提示凭证不工作问题的终极解决办法
- 通过Windows的远程桌面连接远程Ubuntu系统
- Win2003系统远程桌面设置多连接数方法
- Linux系统_ActiveMQ 远程监控_JMX配置
- Windows系统远程桌面的多用户登录