از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
برنامه نویسی پایه سوکت در پایتون
سرفصلهای مطلب
به طور کلی، خدمات شبکه از مدل سنتی مشتری/سرور پیروی می کنند. یک کامپیوتر به عنوان یک سرور برای ارائه یک سرویس خاص عمل می کند و یک کامپیوتر دیگر نماینده سمت مشتری است که از این سرویس استفاده می کند. به منظور برقراری ارتباط از طریق شبکه الف سوکت شبکه وارد بازی می شود که بیشتر به آن سوکت می گویند. این نوع ارتباط سوکت حتی می تواند به صورت داخلی در یک کامپیوتر برای بینprocess ارتباط (IPC).
این مقاله روش نوشتن یک برنامه کاربردی کلاینت/سرور ساده را توضیح می دهد که از طریق سوکت شبکه با استفاده از زبان برنامه نویسی پایتون ارتباط برقرار می کند. برای سادگی، سرور نمونه ما فقط داده های دریافتی را با استفاده از خروجی خروجی می دهد stdout
. ایده پشت برنامه مشتری/سرور، یک حسگر در یک ایستگاه هواشناسی است که داده های دما را در طول زمان جمع آوری می کند و داده های جمع آوری شده را به یک برنامه کاربردی سرور ارسال می کند، جایی که داده ها بیشتر پردازش می شوند.
سوکت چیست؟
سوکت شبکه نقطه پایانی یک پیوند ارتباطی دو طرفه بین دو برنامه یا فرآیند – کلاینت و سرور در مورد ما – است که در حال اجرا هستند. روی شبکه. این میتواند باشد روی همان کامپیوتر و همچنین روی سیستم های مختلف که از طریق شبکه به هم متصل می شوند.
هر دو طرف با نوشتن یا خواندن از سوکت شبکه با یکدیگر ارتباط برقرار می کنند. معادل فنی در واقعیت یک ارتباط تلفنی بین دو شرکت کننده است. سوکت شبکه نشان دهنده شماره متناظر خط تلفن یا یک قرارداد در مورد تلفن های همراه است.
مثال
برای استفاده از عملکرد سوکت، فقط پایتون ماژول سوکت لازم است. در کد مثال زیر پایتون نشان داده شده است ماژول زمان همچنین به منظور شبیه سازی ایستگاه هواشناسی و ساده کردن محاسبات زمان وارد شده است.
در این حالت هم کلاینت و هم سرور اجرا می شوند روی همان کامپیوتر یک سوکت دارای شماره پورت مربوطه است که در مورد ما 23456 است. در صورت تمایل، می توانید یک شماره پورت متفاوت از محدوده اعداد نامحدود بین 1024 و 65535 انتخاب کنید.
سرور
پس از بارگیری پایتون اضافی socket
ماژول یک سوکت جریان اینترنت با استفاده از socket.socket
کلاس با دو پارامتر socket.AF_INET
و socket.SOCK_STREAM
. بازیابی نام میزبان، نام دامنه کاملاً واجد شرایط و آدرس IP توسط روشها انجام میشود gethostname()
، getfqdn()
، و gethostbyname()
، به ترتیب. سپس سوکت به آدرس IP و شماره پورت 23456 با کمک bind()
روش.
با کمک listen()
روشی که سرور برای اتصالات ورودی گوش می دهد روی پورت مشخص شده در حلقه while سرور منتظر درخواست های دریافتی می شود و با استفاده از آن آنها را می پذیرد accept()
روش. داده های ارسال شده توسط مشتری از طریق خوانده می شود recv()
روش به صورت تکه های 64 بایتی است و به سادگی با استفاده از خروجی stdout
. در نهایت، اگر اطلاعات بیشتری از مشتری ارسال نشود، اتصال فعلی بسته می شود.
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
local_hostname = socket.gethostname()
local_fqdn = socket.getfqdn()
ip_address = socket.gethostbyname(local_hostname)
print ("working روی %s (%s) with %s" % (local_hostname, local_fqdn, ip_address))
server_address = (ip_address, 23456)
print ('starting up روی %s port %s' % server_address)
sock.bind(server_address)
sock.listen(1)
while True:
print ('waiting for a connection')
connection, client_address = sock.accept()
try:
print ('connection from', client_address)
while True:
data = connection.recv(64)
if data:
print ("Data: %s" % data)
else:
print ("no more data.")
break
finally:
connection.close()
مشتری
اکنون نگاهی به سمت مشتری خواهیم داشت. کد پایتون بیشتر شبیه به سمت سرور است، به جز استفاده از سوکت – مشتری از connect()
روش، در عوض. در یک for
حلقه داده های دما با استفاده از به سرور ارسال می شود sendall()
روش. تماس از time.sleep(2)
متد، مشتری را به مدت دو ثانیه مکث میکند تا دما را دوباره بفرستد. پس از ارسال تمام داده های دما از لیست، در نهایت اتصال با استفاده از دکمه بسته می شود close()
روش.
import socket
import time
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
local_hostname = socket.gethostname()
local_fqdn = socket.getfqdn()
ip_address = socket.gethostbyname(local_hostname)
server_address = (ip_address, 23456)
sock.connect(server_address)
print ("connecting to %s (%s) with %s" % (local_hostname, local_fqdn, ip_address))
temperature_data = ("15", "22", "21", "26", "25", "19")
for entry in temperature_data:
print ("data: %s" % entry)
new_data = str("temperature: %s\n" % entry).encode("utf-8")
sock.sendall(new_data)
time.sleep(2)
sock.close()
اجرای سرور و کلاینت
برای اجرای هر دو برنامه سرور و کلاینت، دو را باز کنید terminal ویندوز و دستورات زیر را صادر کنید – یک در هر terminal پنجره و به ترتیب زیر:
$ python3 echo-server.py
و
$ python3 echo-client.py
دو شکل زیر خروجی مربوط به برنامه نمونه را نشان می دهد:
_شکل 1_
_شکل 2_
نتیجه
نوشتن برنامه های پایتون که از IPC با سوکت ها استفاده می کنند بسیار ساده است. مثالی که در بالا ارائه شد، مطمئناً می تواند برای رسیدگی به موارد پیچیده تر گسترش یابد. برای اطلاعات بیشتر و روشهای اضافی، ممکن است به چند روش عالی نگاه کنید منابع برنامه نویسی سوکت پایتون در دسترس.
(برچسبها به ترجمه)# python
منتشر شده در 1403-01-28 03:17:05