نوشتن اسکریپت انتقال فایل ها در شبکه با پایتون :: Mr Python | مستر پایتون

نوشتن اسکریپت انتقال فایل ها در شبکه با پایتون

  • ۳۲۸۸

نوشتن اسکریپت انتقال فایل ها در شبکه با پایتون 

درود به همه 

 

رسیدیم به یه آموزش بسیار کاربردی و باحال . میخوایم از سوکت نویسی در پایتون استفاده کنیم و فایل هامون رو بین کامپیوتر های شبکمون به طور صحیح و سالم جا به جا کنیم . با استفاده از این اسکریپت میتونیم هر فایلی رو بدونه توجه به حجم یا فرمتش به طور کامل و صحیح انتقال بدیم . با ما همراه باشید .

 

 

 

 

سورس های استفاده شده در ویدیو آموزشی : 

 

سورس فرستنده : 

# S
import socket

file = input("File : ")
file = open(file , mode = "rb")
data = file.read()
file.close()


ip = "127.0.0.1"
port = 12345

sock = socket.socket(socket.AF_INET ,
                     socket.SOCK_STREAM)

sock.connect((ip , port))

# Connected

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)
        print("." , end="")
    else:
        sock.send(b"endendend")
        print("done")
        sock.close()
        break
    

 

سورس گیرنده : 

# R
import socket

ip = "127.0.0.1"
port = 12345

sock = socket.socket(socket.AF_INET ,
                     socket.SOCK_STREAM)


sock.bind((ip , port))
sock.listen()

c, address = sock.accept()

data = b""
while True:
    tmp_data = c.recv(1024)
    if tmp_data == b"endendend":
        print("done")
        break
    data += tmp_data

filename = input("output name : ")
file = open(filename , mode="wb")
file.write(data)
file.close()

 

امیدوارم مفید واقع بشه . سوالی بود مطرح کنید .

یا حق !

Telegram Channel : @mrpythonblog

  • خیلی عالی بود 

    فقط میشه کاری کرد  که سرعت انتقال بیشتر بشه

    تو حجم های بالا خیلی طولانی میشه

     

    پاسخ:
    سلام . ببین این پست رو تو ذهنم بود یه ورژن جدید ازش بسازم ضبط کنم ویدیو ولی خب نشده هنوز . اما برا سرعت بیشتر میشه از multi threading استفاده کرد تا تیکه های فایل رو به صورت موازی بفرسته . حالا انشاءالله به زودی جدیدشو ضبط میکنم
  • سلام

    اگر بخوایم قبل از ارسال دیتا، دو تا نود بافر هم رو بخونن و مثلا از بین بخش های مختلف فایل یک بخش مشخص رو ارسال کنند کد به چه صورت تغییر میکنه؟

    مثلا اگر یک فایل فیلم داشته باشیم و این فایل به 100 قسمت 1 مگابابتی تقسیم شده باشه و حالا بخوایم مثلا بحش های 13 و 53و 67و73و89و99 و100 رو برای گیرنده ارسال کنم

    پاسخ:
    سلام .
    خیلی کاری نداره . ببینید همین تقسیم بندی هست که داخل while True انجام میدیم ، همینو انجام بدید ولی به جای ارسال کردن اون بخش ها ، هرکدومشون رو داخل یه لیستی به نام مثلا buffer ذخیره کنید . حالا هر کدوم از اعضای این لیست یکی از ۱۰۲۴ بخش (۱۰۲۴ تایی تو اسکریپت تقسیم بندی کردیم) فایلمون هستش . حالا راحت یک for i in range(len(buffer)) روی بافری که ساختیم بزنید و اینطوری هر بار که for اجرا میشه عدد i شماره اون بخش از فایل رو نشون میده و داخل حلقه چک کنه اگه اون عدد (i) برابر با اون بخشی بود که مد نظرتون بود ، اون بخش از بافر (buffer[i]) رو ارسال کنید به هدف .

    البته در نظر داشته باشید متغییر i همیشه یک عدد کمتر از اون بخش فایل رو بهتون نشون میده چون از صفر شروع میشه شمارشش .
  • دمت گرم عالی بود فقط یک سوال میشه طوری پیاده سازیش کرد که کلاینت قابلیت پاز زدن دانلود فایل رو داشته باشه؟ 

     

     

     

    پاسخ:
    درود :)
    بله میشه اسکریپتی نوشت که بشه وسط کار متوقفش کرد و بعدا دوباره ادامه بده .
  • سلام
    دمت گرم عالی بود

    دنبال ارسال فایل میگشتم پیدا نمیکردم که تو همون دقایق اول ویدیو به جوابم رسیدم

    پاسخ:
    درود بر شما .
    خواهش میکنم خداروشکر که مفید بوده
    به زودی ورژن پیشرفته تر این ابزار رو باهم میسازیم که قابلیت رمزنگاری اطلاعات رو هم دارا هستش :)
  • سلام وقت بخیر

    آموزش به شدت مفیدی بود ازتون ممنونم 

    میشه با استفاده از همین برنامه فایل ها رو روی هاست

    سرور هم انتقال داد ؟؟

    پاسخ:
    درود بر شما 
    خواهش میکنم خوشحالم مفید واقع شده :)
    شدنش که بله میشه ولی یه نکته ای هست که باید توجه کرد و اونم اینه که این برنامه اطلاعات رو به صورت کامل ساده و بدون رمزنگاری انتقال میده. بنابراین باید امنیتش رو هم در نظر بگیرید . اگه امنیت خیلی براتون مهمه این روش زیاد امن نیست مگر اینکه سورس کد رو کاری کنید که با رمزنگاری اطلاعات اونارو انتقال بده . 

    حتما در یکی از پست های آینده ویدیویی منتشر میکنیم که ورژن دوم همین ابزار رو میسازیم که با رمزنگاری کردن اطلاعات اونارو انتقال بده :)
  • سلام وبلاگتون عالیه

    میشه یاد بدید چطور با پایتون یک اسکریپتی بنویسیم که لیست پروکسی بگیره و به پروکسی ها وصل شه

    پاسخ:
    درود ممنونم
    برای استفاده از پروکسی قبلا در پایتون توضیح دادیم که چطور میشه از پروکسی تور استفاده کرد .
    اما اینکه لیست پروکسی بگیره اولا اینکه باید مشخص کنید میخواین چه ترافیکی رو از پروکسی عبور بدین (چه پروتکلی) . داخل کتابخونه های مثل requests در پایتون میشه درخواست های ارسالی رو از طریق یک پروکسی عبور داد . لینک زیر مثالی از این موضوع است :
  • من یه سوال دارم

    چرا فایل رو یکجا نفرستادین و تقسیمش کردین؟

    پاسخ:
    سلام
    ببینید با تکه تکه کردن دیتا برای ارسال ، در اصل ما دسترسی بیشتری روی روند ارسال داریم . چون دقیقا میدونیم فایلمون قراره چند تکه بشه و همچنین دقیقا میدونیم چند تکه در حال حاضر ارسال شده. برای مثال وقتی بدونیم کل فایل قراره چند تکه بشه و چند تکش ارسال شده ، میتونیم progressbar در برنامه بزاریم یا ....
    در کل میتونم بگم ارسال مطمئن تری میتونه برای ما داشته باشه .
  • عالی بود 

    پاسخ:
    مچکرم :)
  • دمت گرم عالی خفن ترین وبلاگ هارو در مورد پاتون داری خدایی 

    ی سوال داشتم فقط اگه بخایم توی پاتون ی متن رو به صورت تایپی مانند پرینت کنیم دقیقا چجوری ؟ 

    مثلا وقتی فایل اجرا میشه اون متن ب صورت یهو پرینت نشه و یجورایی اروم و مثل این باشه ک داره تایپ میشه 

    ممنون از شما 

    پاسخ:
    درود . مچکرم .

    سورس زیر جواب سوال شما رو میده . سورس زیر رو اجرا کنید . بعد ازتون یه متن میخواد . یه متن دلخواه بهش بدین ، به صورت تایپ مانند اونو براتون مینویسه .

    from time import sleep
    import sys

    text = input("What is Your Text : ")

    for char in text:
        print(char , end = "")
        sys.stdout.flush()
        sleep(0.1)
    input()

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی