وبلاگ فربد | Farbod Blog

توی این وبلاگ راجع به پروژه هام صحبت می کنم

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

  • ۱۱۶۹

سلام دوستان :)

 

با هم بریم یک آموزش باحال در زمینه شبکه ببینینم

 

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

 

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

 

خب بریم سراغ کد

 

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

 

# 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

 

خب توی خط اول اومدیم ماژول socket رو توی برنامه مون import کردیم 

 

بعدش آدرس فایل رو از کاربر گرفتیم (اگر اسکریپتتون با فایلتون هم مسیر باشه لازم نیست مسیر کامل رو وارد کنید) و مقدار فایل رو ریختیم داخل یک متغیر

 

بعدش ip و port گیرنده مون رو مشخص کردیم(به جای متغییر ip باید آی پی شخصی که میخواین فایل رو براش ارسال کنین وارد کنید)

 

بعد یک شی socket از نوع TCP ساختیم

 

و بعد به آی پی و پورت مورد نظرمون متصل شدیم

 

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

 

خب این سورس فرستنده بود حالا بریم سراغ سورس گیرنده 

 

سورس:

 

# 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()

خب خطوط اول این برنامه هم شبیه همون برنامه فرستنده هست فقط اینجا بعد از ساختن شی آی پی و یک پورت رو برای خودمون بایند کردیم مثل اینکه یک خونه و شماره تلفن برای خودمون اجاره کنیم :) (برای بدست آوردن آی پی شبکه خودتون میتونین وارد cmd بشین و دستور ipconfig رو وارد کنین و آی پی تون رو ببینین)

و بعدش روی آی پی و پورت رزرو شده مون اومدیم منتظر یک کانکشن موندیم 

 

زمانی که کسی به ما متصل شد وارد حلقه بینهایت میشه و data رو از شخص متصل شده دریافت میکنه زمانی که کلمه endendend  و دریافت کرد متوجه میشه که فایل ارسال شده پس از حلقه خارج میشه و دیتا دریافت شده رو داخل یک فایل ذخیره میکنه

 

 

 

امیدارم براتون مفید بوده باشه D:

 

 

 

 

 


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