وبلاگ رسانگار
با ما حرفه ای باشید

سرور مجازی NVMe

برنامه نویسی پایه سوکت در پایتون

0 18
زمان لازم برای مطالعه: 3 دقیقه


به طور کلی، خدمات شبکه از مدل سنتی مشتری/سرور پیروی می کنند. یک کامپیوتر به عنوان یک سرور برای ارائه یک سرویس خاص عمل می کند و یک کامپیوتر دیگر نماینده سمت مشتری است که از این سرویس استفاده می کند. به منظور برقراری ارتباط از طریق شبکه الف سوکت شبکه وارد بازی می شود که بیشتر به آن سوکت می گویند. این نوع ارتباط سوکت حتی می تواند به صورت داخلی در یک کامپیوتر برای بین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

امتیاز شما به این مطلب
دیدگاه شما در خصوص مطلب چیست ؟

آدرس ایمیل شما منتشر نخواهد شد.

لطفا دیدگاه خود را با احترام به دیدگاه های دیگران و با توجه به محتوای مطلب درج کنید