一 代码
服务器:
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('无法连接监控端')
二 运行结果
相关推荐
局域网中远程桌面监控系统的设计与实现 远程桌面监控系统是指通过局域网连接的计算机之间,为了实现远程监控和控制的系统。该系统可以让本地计算机通过局域网访问不同的远程计算机,并对其进行操作。维护人员可以...
VC++远程桌面监控系统VC++ remote desktop monitoring system
《局域网中远程桌面监控系统的设计与实现》 远程桌面监控系统是现代信息技术中一个重要的组成部分,尤其在企业管理和网络维护中具有广泛的应用前景。本文主要探讨了一种基于Java语言,利用NetBeans IDE 6.7开发的...
【标题】:“基于VC++的远程桌面监控系统”是指利用微软的Visual C++开发环境,构建了一种能够实现远程桌面监控的应用程序。这种系统允许服务器端实时获取并查看客户端计算机的桌面状态,从而达到监控的目的。 ...
局域网中远程桌面监控系统 远程桌面监控系统是指在局域网中,通过远程桌面监控技术,实现对远程计算机的监控和控制。该系统可以让管理员实时地监控联网计算机的运行情况,对出现故障的计算机进行修复,并对员工的...
本视频为C/C++编程经典项目之C++远程桌面监控系统。主要利用C语言知识以及C++编程知识以及少量算法、数据结构的知识来制作,本视频并不建议完全零基础的小伙伴下载学习,因为其中的语法知识或者代码名词可能会对于零...
《VC++远程桌面监控系统详解》 在信息技术领域,远程桌面监控系统是一种高效且实用的工具,它允许管理员或授权用户在不实际坐在目标计算机前的情况下,也能对远程设备进行实时监控和控制。本篇文章将深入探讨以VC++...
"局域网中远程桌面监控系统的设计与实现" 该论文的主要内容是关于局域网中远程桌面监控系统的设计与实现,旨在实现管理员可以监控和控制局域网中的远程计算机。该系统可以在不同的操作系统平台上运行,以实现跨平台...
远程桌面监控系统是一种技术,允许用户通过网络连接到另一台计算机,从而实现远程控制和监控。在本文中,我们将深入探讨基于VC++开发的远程桌面监控系统,它由服务器端和客户端两部分组成。 首先,我们要理解服务器...
【VC++远程桌面监控系统】是一种基于C++编程语言实现的软件系统,它允许用户在局域网内对其他计算机进行远程监控。该系统通常应用于网络管理、远程协助或者教学环境中,以方便管理员或者教师对多台计算机进行实时...
远程桌面监控系统是一种技术,允许管理员或授权用户通过网络实时查看和控制远程计算机的桌面,以便进行技术支持、员工监控或安全管理。在这个基于VC++的毕业论文设计中,我们将探讨如何构建这样一个系统。 首先,...
《局域网中远程桌面监控系统的设计与实现》是一篇探讨如何在局域网环境下构建远程桌面监控系统的毕业设计论文。远程桌面监控系统(Remote Desktop Monitoring System,简称RDMS)旨在使管理员能通过局域网实时监控和...
VC 课程设计:远程桌面监控系统 源码 文档,四川理工学院计算机科学系。程序可让您同时访问不同的远程计算机,无论何时何地,关键词:TCP;事件驱动;网络;套接字;远程桌面控制显示另一台计算机的屏幕(透过网际...
《局域网中远程桌面监控系统的设计实现分析》 远程桌面监控系统是现代企业网络管理中的重要工具,它使得管理员能够在局域网内对多台计算机进行实时监控和管理,从而提高工作效率,保障网络环境的稳定运行。本文将...