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