113.10.03-測試完整版的程式說明產生
使用繁體中文,根據圖片,及以下說明,建立實際可以執行的完整範例程式,程式需分成伺服端及clinet端兩支程式,謝謝
使用繁體中文,在winn1環境下,用python語言實作及UI界面,伺服端電腦有權限可以控制client端電腦,區域網路中,新增傳輸與接收檔案功能,呼叫外部upd-sender.exe及upd-receriver.exe的程式來進行傳輸,這upd-sender.exe及upd-receriver.exe程式的位置的呼叫可以是在"C:\Windows\System32\udp-receiver.exe"、"C:\Windows\System32\udp-sender.exe",或是跟著程式啟動的資料夾中,兩種都可以使用,clinet端電腦,收到伺服端電腦的廣播後,跟伺服端電腦進行報到
程式建構,說明如下:
所有的程式都有要註解說明,好以後維護
區域網路中的client端電腦要先跟伺服端電腦報到,伺服端電腦要在程式啟動時用現在的使用的IP,先進行區網的廣播,持續時間30秒,並要有手動廣播的按鈕可以再次廣播伺服端電腦的ip位置,等client端電腦報到後呈現在ui畫面上,需要呈現有client端電腦的ip位置、MAC位置、電腦名稱、狀態(online或offline),此列表中,如果使用者手動按下重新廣播按鈕後,在UI界面上,clinet端資料進行重整,client電腦離線就顯示offline,如果還連線就顯示online,讓clinet端可以知道伺服端在那而進行報到,使用upd協定,port號8500,如果被佔用就改用8501;伺服端使用者程式界面預設800*600,最上面寫標題"UDP-檔案派送",標題背景是藍色,標題是白色字,大小用18;
中間呈現是clinet端電腦報到的狀況,接收clinet端電腦的Ip位置、Mac位置、電腦名稱等三種,使用格子狀分開成:ip位置、Mac位置、電腦名稱、狀態(cliet端電腦有報到就顯示oneline、離線就顯示offline),區網中會有多台clinet端電腦上來報到,報到後,將就名稱暫存在UI畫面中顯示,如果還有新的client端電腦上來報到,就自動整理名單,間隔5秒確認,如果沒有新clinet電腦上來報到,就不進行clinet端電腦列表的重整,每一列代表的是一台clinet端電腦的資料,因此要讓伺服端使用者可以同時選擇多列的clinet端電腦進行檔案派送;
在UI界面中,clinet端電腦列表的下方,要有三個功能的按鈕在同一列呈現,分別是傳送單一檔案、傳送多個檔案、傳送資料夾,分別對應三個不同的功能傳送方式,按鈕字體大小為16,按鈕背景為"royalblue"色,文字為"orange"色,client端電腦列表呈現接在網格下方呈現,一開始先預設15列,可以動態增加;要讓表格內的資料置中呈現,可以利用 Treeview 的 column 和 heading 方法來設定每一個欄位的 anchor 屬性為 CENTER。這樣可以讓表格中的資料以及欄位標題置中對齊。
傳送單一檔案說明:
功能:一次只能選擇一個檔案
行為:伺服端使用者要先選定UI列表中已報到的clinet端電腦,最少是一列,最多是全選,選後要呈現被選定的狀態呈現,伺服端電腦使用者才能接著選定好一個想要傳輸派送的檔案,接著將檔案名稱轉成檔案傳輸清單,並先計算出要傳送的"檔案"的校驗碼,根據伺服端電腦使用者在選定列表中的clinet電腦,把檔案傳輸清單在背景執行,先傳送給選定的各client端電腦,等待2秒讓區網的clinet端電腦有時間可以接收檔案傳輸清單,當client端電腦接收到伺服端先傳來的檔案傳輸清單後,根據檔案傳輸清單,在client端程式啟動的位置要建立一個資料夾來準備接收檔案,然後clinet端電腦依照檔案傳輸清單啟動udp-receriver.exe接收檔案,在client端電腦使用 subprocess.Popen 捕獲 udp-receiver.exe 的標準輸出,此標準輸出在背景執行不要出現終端機的畫面,並解析進度資訊後回報給伺服端電腦程式,伺服端電腦程式接收clinet端傳來的標準輸出,要在UI界面最底的上方的欄位,"標準輸出"欄位,呈現伺服端電腦程式接收clinet端傳來的標準輸出,如沒有資料傳出,顯示"準備中",再等2秒後,伺服端電腦程式根據檔案傳輸清單接著等3秒讓clinet端電腦有時間完成接收檔案傳輸清單後,在背景呼叫udp-sender.exe檔用指令的方式執行,需加上依照伺服端選定的clinet電腦數量,在 send_file_list 函數中,我們根據選取的客戶端數量計算 min-receivers,即接收端的最小數量。使用 --min-receivers 設定最小接收端數量為 client_count(根據選定的客戶端數量動態設定)。加入 --autostart 參數,並設定為 3 秒,代表當有指定數量的接收端準備好後,自動啟動檔案傳輸開始傳輸,而後當client端電腦完成接收後,先計算接收到的檔案的校驗碼,並將結果在背景執行,回報給伺服端電腦,伺端端電腦接收後,比對校驗碼,確認檔案傳輸是否成功,如果成功,就alert一個"檔案已完成傳輸",完成單一檔案派送
要讓表格內的資料置中呈現,可以利用 Treeview 的 column 和 heading 方法來設定每一個欄位的 anchor 屬性為 CENTER。這樣可以讓表格中的資料以及欄位標題置中對齊。
# 建立表格 self.tree = ttk.Treeview(root, columns=("IP", "MAC", "Name", "Status"), show='headings') # 設定表格標題與資料置中 self.tree.heading("IP", text="IP 位置", anchor="center") self.tree.heading("MAC", text="MAC 位置", anchor="center") self.tree.heading("Name", text="電腦名稱", anchor="center") self.tree.heading("Status", text="狀態", anchor="center")
def select_client_and_file(self):
selected_items = self.tree.selection() # 可以選取多個客戶端
選取多個客戶端:self.tree.selection() 現在可以選取多個客戶端,每個選取的客戶端會存儲在 client_ips 列表中。
傳送檔案到多個客戶端:在選取檔案後,程式會對每個選取的客戶端進行傳輸。每個客戶端 IP 都會分別執行 prepare_file_transfer_list 和 send_file_list
在UI界面中,三個檔案派送功能按鈕的欄位下方,增加一欄為傳輸狀況:分成→等待中、傳輸中、傳輸完成,字體大小為16,文字為"goldnrod"色;
在UI界面中,增加一欄在傳輸狀況下方,呈現"狀態"說明:被選定要傳送的"檔案的名稱"、"檔案大小"、"檔案校檢碼",檔案資料來源:為使用者用按選選定的檔案或是資料夾,
在UI界面最底的上方,增加一欄,標準輸出:顯示的資料是傳輸檔案過程中"伺服端電腦程式接收clinet端傳來的標準輸出",如果沒有傳輸檔案,就顯示"準備中,
在UI界面最底部獨立一欄,增加一格備註欄分成左右兩格,左格寫"感謝ChatGPT 感謝UDPcast",並用跑碼燈方式,從右向左移動;右格寫:製作者:WCS 日期:2024.10.01,字體大小為12,左右格的背景色均為"turquoise",文字均為"darkorange"色,
當檔案傳輸完成後,在UI界面上alert一個"檔案傳輸已完成",提醒使用者,在檔案進行傳輸的過程式,使用者不能再點選三個檔案派送功能按鈕,如果點選,alert一個"檔案傳輸中"提醒使用者,並且不能打中或中斷現在的檔案傳輸程序
在UI界面中,新增一欄,新增"廣播伺服器"按鈕,可以手動廣播伺服器30秒,讓之後還沒報到的clinet電腦可以收到廣播後,到伺服端電腦報到
在UI界面中,要有一個文字文方框,接收來自client端執行udp-receiver.exe時的標準輸出
各程序的執行,要免運互相干擾而造成UI畫面無法呈現的狀況,可以的話用多線程處理
client端電腦,啟動程式後就在背景執行,使用upd協定,接收網路上伺服端電腦電腦的廣播後進行報到,port號8500,如果被佔用就改用8501,就向伺服端電腦報到,要提供伺服端的資料為:clienrt端電腦的ip位置、MAC位置、電腦名稱等,然後在背景執行,等待伺服端電腦的訊號,當收到伺服端傳來的檔案清單,再開始呼叫udp-receiver.exe進行檔案接收工作
行為:啟動後在背景執行,回傳clienrt端電腦的ip位置、MAC位置、電腦名稱後,等待,配合伺服端電腦進行接收檔案的工作,當收到伺服端傳來的檔案清單後啟動udp-receiver.exe程式被呼叫執行時,要在背景執行,不要出現終端機的畫面讓clinet端電腦使用者打斷檔案傳輸的工作,
接收單一檔案說明:
功能:一次只能選擇一個檔案
行為:當client端電腦接收到伺服端先傳來的檔案傳輸清單後,根據檔案傳輸清單,在client端程式啟動的位置要建立一個資料夾來準備接收檔案,然後clinet端電腦依照檔案傳輸清單啟動udp-receriver.exe接收檔案,在client端電腦使用 subprocess.Popen 捕獲 udp-receiver.exe 的標準輸出,此標準輸出在背景執行不要出現終端機的畫面,並解析進度資訊後回報給伺服端電腦程式,伺服端電腦程式接收clinet端傳來的標準輸出,而後當client端電腦完成接收後,先計算接收到的檔案的校驗碼,並將結果在背景執行,回報給伺服端電腦
根據以上說明,建立實際可以執行的完整範例程式,謝謝