-
يكشنبه, ۱۹ ارديبهشت ۱۴۰۰، ۱۰:۴۷ ب.ظ
-
۴۱۷
فرستنده : Ali Zabetpoor
نام پروژه : اسکریپت ارسال و دریافت فایل در شبکه به صورت گرافیکی
دسته بندی : python
توضیحات : پروژه شامل دو اسکریپت است . 1 - اسکریپت فرستنده 2 - اسکریپت گیرنده . اسکریپت فرستنده فایل مورد نظر رو در شبکه ارسال میکنه و اسکریپت گیرنده اونو دریافت میکنه و ذخیره میکنه . از این اسکریپت ها میتوان برای انتقال فایل در شبکه بر روی کامپیوتر های مختلف استفاده کرد . هر دو اسکریپت دارای رابط گرافیکی هستند .
نکته : مستر پایتون هیچ تغییری در سورس کد های ارسالی ایجاد نخواهد کرد و سورس کد مستقیما نوشته خود شخص فرستنده است .
توضیحات MrPython در مورد پروژه :در این پروژه برای طراحی رابط کاربری گرافیکی از کتابخونه ی pySimpleGUI و برای ارتباط شبکه و ارسال و دریافت اطلاعات از کتابخونه ی socket استفاده شده .
برای اجرای صحیح اسکریپت باید کتابخونه ی pySimpleGUI رو نصب کنید .
pip install pySimpleGUI
سورس فرستنده :
from threading import Thread import PySimpleGUI as sg from PySimpleGUI.PySimpleGUI import WINDOW_CLOSED
from socket import AF_INET, SOCK_STREAM, socket
layout=[ [sg.Text("file location: "),sg.Input(key="-FILE-",size=(30,2)),sg.FileBrowse(size=(20,1))], [sg.Text("ip reciever:"),sg.InputText(key="-IP-")], [sg.Text("port reciever:"),sg.InputText(key="-PORT-")], [sg.Button("send",key="send-btn",size=(8,2))], [sg.ProgressBar(2,orientation="h",size=(20,15),key="-progress-bar-",bar_color=("green","white"))], ]
window=sg.Window("sender app",layout=layout,size=(500,200),font="Arial 12",element_justification="c")
def send_file(file,ip,port): with open(file=file,mode="rb") as file: data=file.read() try: sock=socket(AF_INET,SOCK_STREAM) sock.connect((ip,port))
bar=int(len(data)/1024) i=0 window["-progress-bar-"].UpdateBar(0,bar) while True: if len(data)>0: tmp_data=data[0:1024] if len(tmp_data)<1024: tmp_data+=chr(0).encode()*(1024-len(tmp_data)) data=data[1024:] sock.send(tmp_data) i+=1 window["-progress-bar-"].UpdateBar(i) else: # sock.send(file.encode()) sock.close() break window.write_event_value("-end-task-","file sended") except: window.write_event_value("-error-","error happened")
thread=None
while True: event,inputstr=window.read() if event==sg.WINDOW_CLOSED: break elif event=="send-btn" and not thread and inputstr["-PORT-"].isdigit() and \ not inputstr["-IP-"].isalnum(): window["-progress-bar-"].UpdateBar(0) file=inputstr["-FILE-"] ip=inputstr["-IP-"] port=int(inputstr["-PORT-"]) thread=Thread(target=send_file,args=(file,ip,port)) thread.start() elif event=="-error-": thread=None sg.PopupAutoClose("check you ip or port",title="error") elif event=='-end-task-': thread=None sg.popup("the file has been sent") window.close()
سورس گیرنده :
from threading import Thread import PySimpleGUI as sg from PySimpleGUI.PySimpleGUI import No, WIN_CLOSED from socket import AF_INET, SOCK_STREAM, socket
def recieve_data(ip,port): global thread filedata=b"" try: sock=socket(AF_INET,SOCK_STREAM) sock.bind((ip,port)) sock.listen() sender,addr=sock.accept() while True: data=sender.recv(1024) if len(data)==0: sock.close() break filedata+=data window.write_event_value("-end-task-",filedata) except: window.write_event_value("-problem-","problem happened")
layout=[ [sg.Text("your ip:"),sg.InputText(key="-IP-")], [sg.Text("your port:"),sg.InputText(key="-PORT-")], [sg.Button("start recieving",key="-btn-recieve-",border_width=2,s=(11,2),pad=(0,15))], ]
window=sg.Window("recieve app",layout=layout,font="Arial 12",element_justification="c",size=(400,150))
thread=None while True: event,inputstr=window.read() if event==sg.WIN_CLOSED: break elif event=="-btn-recieve-" and not thread and inputstr["-PORT-"].isdigit() and \ not inputstr["-IP-"].isalnum(): ip=inputstr["-IP-"] port=int(inputstr["-PORT-"]) thread=Thread(target=recieve_data,args=(ip,port),daemon=True) thread.start() sg.popup_auto_close("waiting for sender...",auto_close_duration=2) elif event=="-problem-": thread=None sg.popup_no_titlebar("correct your ip or port") elif event=="-end-task-": data_file=inputstr[event] thread=None text=sg.popup_get_text("name of the file:","save file") with open(text,"wb") as file: file.write(data_file) sg.popup("file has been saved")
window.close()
جهت ارسال پروژه های خود :
پروژه ی خود به همراه توضیح آن ارسال کنید به :
mrpythonblog@gmail.com
Telegram Channel : @mrpythonblog
برچسب ها:
project,