最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用Python實(shí)現(xiàn)局域網(wǎng)遠(yuǎn)程監(jiān)控電腦屏幕的方法

 更新時(shí)間:2025年12月07日 15:09:26   作者:燕鵬01  
文章介紹了兩種使用Python在局域網(wǎng)內(nèi)實(shí)現(xiàn)遠(yuǎn)程監(jiān)控電腦屏幕的方法,方法一使用mss和socket,方法二使用PyAutoGUI和Flask,每種方法都詳細(xì)說(shuō)明了如何安裝必要的庫(kù)、運(yùn)行服務(wù)端和客戶端代碼,以及注意事項(xiàng),需要的朋友可以參考下

使用Python可以在局域網(wǎng)內(nèi)實(shí)現(xiàn)遠(yuǎn)程監(jiān)控電腦屏幕。以下是兩種實(shí)現(xiàn)方法:

方法一:使用mss和socket實(shí)現(xiàn)屏幕共享

服務(wù)端(被監(jiān)控端)

import mss
import mss.tools
import socket
import threading
import time
import zlib

class ScreenServer:
    def __init__(self, host='0.0.0.0', port=5000):
        self.host = host
        self.port = port
        self.running = False
        self.server_socket = None
        self.quality = 50  # 圖像質(zhì)量 (0-100)
        
    def start_server(self):
        self.server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
        self.server_socket.bind((self.host, self.port))
        self.server_socket.listen(5)
        print(f"屏幕共享服務(wù)器啟動(dòng)在 {self.host}:{self.port}")
        
        self.running = True
        while self.running:
            try:
                client_socket, addr = self.server_socket.accept()
                print(f"新的連接來(lái)自: {addr}")
                # 為每個(gè)客戶端創(chuàng)建新線程
                client_thread = threading.Thread(
                    target=self.handle_client, 
                    args=(client_socket,)
                )
                client_thread.daemon = True
                client_thread.start()
            except Exception as e:
                if self.running:
                    print(f"接受連接時(shí)出錯(cuò): {e}")
    
    def handle_client(self, client_socket):
        try:
            with mss.mss() as sct:
                # 獲取所有顯示器
                monitors = sct.monitors
                # 使用主顯示器
                monitor = monitors[1]  # 索引0是所有顯示器的合并區(qū)域,索引1是主顯示器
                
                while self.running:
                    # 捕獲屏幕
                    screenshot = sct.grab(monitor)
                    
                    # 轉(zhuǎn)換為PNG并壓縮
                    png_data = mss.tools.to_png(screenshot.rgb, screenshot.size)
                    compressed_data = zlib.compress(png_data, level=zlib.Z_BEST_COMPRESSION)
                    
                    # 發(fā)送數(shù)據(jù)大小和數(shù)據(jù)
                    size_data = len(compressed_data).to_bytes(4, byteorder='big')
                    client_socket.send(size_data + compressed_data)
                    
                    # 控制幀率
                    time.sleep(0.05)  # 約20FPS
                    
        except Exception as e:
            print(f"處理客戶端時(shí)出錯(cuò): {e}")
        finally:
            client_socket.close()
    
    def stop_server(self):
        self.running = False
        if self.server_socket:
            self.server_socket.close()

if __name__ == "__main__":
    server = ScreenServer()
    try:
        server.start_server()
    except KeyboardInterrupt:
        server.stop_server()
        print("服務(wù)器已停止")

客戶端(監(jiān)控端)

import socket
import cv2
import numpy as np
import zlib
import threading

class ScreenClient:
    def __init__(self, server_ip, server_port=5000):
        self.server_ip = server_ip
        self.server_port = server_port
        self.running = False
        self.client_socket = None
        
    def connect(self):
        try:
            self.client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            self.client_socket.connect((self.server_ip, self.server_port))
            self.running = True
            print(f"已連接到服務(wù)器 {self.server_ip}:{self.server_port}")
            return True
        except Exception as e:
            print(f"連接失敗: {e}")
            return False
    
    def receive_screen(self):
        try:
            while self.running:
                # 接收數(shù)據(jù)大小
                size_data = self.client_socket.recv(4)
                if not size_data:
                    break
                    
                data_size = int.from_bytes(size_data, byteorder='big')
                
                # 接收壓縮的圖像數(shù)據(jù)
                received_data = b""
                while len(received_data) < data_size:
                    chunk = self.client_socket.recv(min(4096, data_size - len(received_data)))
                    if not chunk:
                        break
                    received_data += chunk
                
                if len(received_data) != data_size:
                    print("數(shù)據(jù)接收不完整")
                    continue
                
                # 解壓并解碼圖像
                decompressed_data = zlib.decompress(received_data)
                nparr = np.frombuffer(decompressed_data, np.uint8)
                frame = cv2.imdecode(nparr, cv2.IMREAD_COLOR)
                
                if frame is not None:
                    cv2.imshow('遠(yuǎn)程桌面', frame)
                    
                    # 按'q'退出
                    if cv2.waitKey(1) & 0xFF == ord('q'):
                        break
                        
        except Exception as e:
            print(f"接收數(shù)據(jù)時(shí)出錯(cuò): {e}")
        finally:
            self.close()
    
    def close(self):
        self.running = False
        if self.client_socket:
            self.client_socket.close()
        cv2.destroyAllWindows()

if __name__ == "__main__":
    # 替換為服務(wù)端的IP地址
    server_ip = "192.168.1.100"  
    
    client = ScreenClient(server_ip)
    if client.connect():
        client.receive_screen()

方法二:使用PyAutoGUI和Flask實(shí)現(xiàn)Web界面監(jiān)控

服務(wù)端(被監(jiān)控端)

from flask import Flask, Response
import pyautogui
import cv2
import numpy as np
import threading
import time

app = Flask(__name__)

class ScreenStreamer:
    def __init__(self):
        self.frame = None
        self.running = True
        
    def capture_screen(self):
        while self.running:
            # 截取屏幕
            screenshot = pyautogui.screenshot()
            # 轉(zhuǎn)換為OpenCV格式
            frame = cv2.cvtColor(np.array(screenshot), cv2.COLOR_RGB2BGR)
            # 編碼為JPEG
            _, jpeg = cv2.imencode('.jpg', frame, [cv2.IMWRITE_JPEG_QUALITY, 70])
            self.frame = jpeg.tobytes()
            time.sleep(0.1)  # 控制幀率
    
    def get_frame(self):
        return self.frame
    
    def stop(self):
        self.running = False

streamer = ScreenStreamer()

def generate_frames():
    while True:
        frame = streamer.get_frame()
        if frame:
            yield (b'--frame\r\n'
                   b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n')

@app.route('/')
def index():
    return '''
    <html>
      <head>
        <title>遠(yuǎn)程桌面監(jiān)控</title>
      </head>
      <body>
        <h1>遠(yuǎn)程桌面監(jiān)控</h1>
        <img src="/video_feed" width="80%">
      </body>
    </html>
    '''

@app.route('/video_feed')
def video_feed():
    return Response(generate_frames(),
                    mimetype='multipart/x-mixed-replace; boundary=frame')

if __name__ == '__main__':
    # 啟動(dòng)屏幕捕獲線程
    capture_thread = threading.Thread(target=streamer.capture_screen)
    capture_thread.daemon = True
    capture_thread.start()
    
    # 啟動(dòng)Flask服務(wù)器
    app.run(host='0.0.0.0', port=5000, threaded=True)

安裝必要的庫(kù)

pip install mss opencv-python pyautogui flask pillow zlib

使用說(shuō)明

方法一

  • 在被監(jiān)控電腦上運(yùn)行服務(wù)端代碼
  • 在監(jiān)控電腦上運(yùn)行客戶端代碼,并設(shè)置正確的服務(wù)端IP地址
  • 客戶端會(huì)顯示一個(gè)窗口展示遠(yuǎn)程桌面

方法二

  • 在被監(jiān)控電腦上運(yùn)行Flask服務(wù)端
  • 在瀏覽器中訪問(wèn) http://被監(jiān)控電腦IP:5000 即可查看遠(yuǎn)程桌面

注意事項(xiàng)

  • 安全性:這些代碼僅用于學(xué)習(xí)和授權(quán)的監(jiān)控用途,請(qǐng)確保你有權(quán)限監(jiān)控目標(biāo)電腦
  • 性能:屏幕共享可能會(huì)占用較多網(wǎng)絡(luò)帶寬,請(qǐng)根據(jù)網(wǎng)絡(luò)情況調(diào)整圖像質(zhì)量和幀率
  • 防火墻:確保相關(guān)端口(如5000)在防火墻中已開(kāi)放

優(yōu)化建議

  1. 可以根據(jù)網(wǎng)絡(luò)狀況動(dòng)態(tài)調(diào)整圖像質(zhì)量
  2. 可以只傳輸屏幕變化的部分以減少數(shù)據(jù)量
  3. 可以添加身份驗(yàn)證機(jī)制增強(qiáng)安全性
  4. 對(duì)于高分辨率屏幕,可以考慮縮放圖像以減少數(shù)據(jù)量

以上就是使用Python實(shí)現(xiàn)局域網(wǎng)遠(yuǎn)程監(jiān)控電腦屏幕的方法的詳細(xì)內(nèi)容,更多關(guān)于Python遠(yuǎn)程監(jiān)控電腦屏幕的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 解決python爬蟲(chóng)中有中文的url問(wèn)題

    解決python爬蟲(chóng)中有中文的url問(wèn)題

    今天小編就為大家分享一篇解決python爬蟲(chóng)中有中文的url問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05
  • requests在python中發(fā)送請(qǐng)求的實(shí)例講解

    requests在python中發(fā)送請(qǐng)求的實(shí)例講解

    在本篇文章里小編給大家整理的是一篇關(guān)于requests在python中發(fā)送請(qǐng)求的實(shí)例講解內(nèi)容,有興趣的朋友們可以測(cè)試學(xué)習(xí)下。
    2021-02-02
  • pycharm通過(guò)anaconda安裝pyqt5的教程

    pycharm通過(guò)anaconda安裝pyqt5的教程

    PyCharm是一種Python IDE,帶有一整套可以幫助用戶在使用Python語(yǔ)言開(kāi)發(fā)時(shí)提高其效率的工具,這篇文章主要介紹了pycharm通過(guò)anaconda來(lái)安裝pyqt5的教程,需要的朋友可以參考下
    2020-03-03
  • Python matplotlib如何繪制各種流線圖

    Python matplotlib如何繪制各種流線圖

    在Python中不僅可以繪制折線圖、柱狀圖、散點(diǎn)圖等常規(guī)圖外,還支持繪制量場(chǎng)圖、頻譜圖、提琴圖、箱型圖等特殊圖。本文將主要介紹如何繪制流線圖,需要的朋友可以參考一下
    2021-12-12
  • Python 手動(dòng)導(dǎo)包的實(shí)現(xiàn)

    Python 手動(dòng)導(dǎo)包的實(shí)現(xiàn)

    本文主要介紹了Python 手動(dòng)導(dǎo)包的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • 關(guān)于Python元祖,列表,字典,集合的比較

    關(guān)于Python元祖,列表,字典,集合的比較

    下面小編就為大家?guī)?lái)一篇關(guān)于Python元祖,列表,字典,集合的比較。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-01-01
  • 使用Python?文件讀取的多種方式(四種方式)

    使用Python?文件讀取的多種方式(四種方式)

    這篇文章主要介紹了Python?文件讀取的4種方式,主要有直接打開(kāi)就讀方式,用read()打開(kāi),用readines()以及用readline()方式,每種方式通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-11-11
  • Python中的__repr__()方法小結(jié)

    Python中的__repr__()方法小結(jié)

    在 Python 中,__repr__()?是一個(gè)特殊方法,用于定義對(duì)象的字符串表示形式,本文主要介紹了Python中的__repr__()方法小結(jié),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01
  • 解決python?pip安裝第三方模塊報(bào)錯(cuò):error:legacy-install-failure

    解決python?pip安裝第三方模塊報(bào)錯(cuò):error:legacy-install-failure

    pip是python的第三方庫(kù)管理器,可以根據(jù)所開(kāi)發(fā)項(xiàng)目的需要,使用pip相關(guān)命令安裝不同庫(kù),下面這篇文章主要給大家介紹了關(guān)于解決python?pip安裝第三方模塊報(bào)錯(cuò):error:?legacy?-?install?-?failure的相關(guān)資料,需要的朋友可以參考下
    2023-04-04
  • Python Kivy基礎(chǔ)教程的使用

    Python Kivy基礎(chǔ)教程的使用

    本文主要介紹了Python Kivy基礎(chǔ)教程的使用,包括?Label、Button、TextInput、Image、Spinner、Checkbox?和?ToggleButton?的用法,具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-04-04

最新評(píng)論

通州市| 宁蒗| 鄄城县| 景德镇市| 宣汉县| 德保县| 海盐县| 娄烦县| 岳阳市| 鄢陵县| 榆树市| 濮阳市| 营口市| 福鼎市| 噶尔县| 聂拉木县| 周至县| 通江县| 大关县| 军事| 沐川县| 西乡县| 无锡市| 长白| 南召县| 奇台县| 井冈山市| 尼木县| 定兴县| 嘉善县| 固始县| 毕节市| 越西县| 神池县| 治多县| 顺义区| 扎兰屯市| 丹东市| 新乐市| 廊坊市| 宕昌县|