-
چهارشنبه, ۱ ارديبهشت ۱۴۰۰، ۰۳:۵۵ ب.ظ
-
۱۲۲۲
سلام دوستان :)
با هم بریم یک آموزش باحال در زمینه شبکه ببینینم
توی این آموزش قراره با استفاده از اسکریپت پایتونی یک فایل رو در شبکه انتقال بدیم
توی این اسکریپت میخوایم از سوکت نویسی استفاده کنیم و فایل ها رو صحیح و سالم بدون توجه به حجم و فرمتشون انتقال بدیم
خب بریم سراغ کد
سورس فرستنده:
# 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: