ساخت برنامهی client/server با استفاده از پایتون
در این بخش قصد داریم با بکار گیری سوکت در پایتون، برای اتصال دو دستگاه به یکدیگر استفاده نماییم. در یک سمت، یک برنامه سرویس دهنده (server) قرار دارد که بر روی یک پورت خاص به درخواستها گوش داده و منتظر اتصال و سرویس دهی به دستگاه دیگر است. در طرف دیگر یک برنامهی سرویس گیرنده (client) قرار دارد که قرار است با server ارتباط برقرار کند.
ما این کار را بر روی سیستم خود انجام میدهیم. یعنی client و server هر دو بر روی یک سیستم قرار داشته و به یکدیگر متصل میشوند. شما میتوانید این کار را در شبکهی محلی خود نیز انجام دهید.
ساخت Server
به منظور ساخت یک سرویس دهنده، ابتدا باید کتابخانهی socket را به پروژهی خود اضافه کنیم. سپس یک شی از کلاس socket موجود در این کتابخانه ساخته و یک آدرس IP و پورت را به آن اختصاص میدهیم. این server بر روی این آدرس و پورت مشخص منتظر دریافت یک درخواست اتصال میماند.
import socket # Create an socket object. Family: Internet , Type: TCP mysock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # My system IP address (127.0.0.1) host = "localhost" port = 9393 # Server Address addr = (host, port) mysock.bind(addr) # queue up to 10 requests mysock.listen(10) while True: clientsock, clientaddr = mysock.accept() print ("connection from: {0}".format(str(clientaddr))) msg = "test message from server" clientsock.send(msg.encode('ascii')) clientsock.close()
سوکت ایجاد شده از خانوادهی اینترنت بوده (AF_INET) و از نوع TCP میباشد (SOCK_STREAM). به این server آدرس دستگاه خودمان (localhost) و پورت ۹۳۹۳ اختصاص داده شده است و سپس منتظر دریافت درخواست اتصال میباشد. این سرویس دهنده به ۱۰ درخواست همزمان میتواند پاسخ دهد. حلقهی while مشخص میکند که server به طور مداوم آماده به پاسخ گویی است. پس از اتصال به client، ابتدا آدرس آن را چاپ کرده و سپس یک پیغام را به صورت ascii کد گذاری کرده و به آن ارسال میکند. در نهایت ارتباط خود را با client مورد نظر میبندد.
ساخت Client
حال باید یک برنامهی سرویس گیرنده (client) ایجاد نماییم تا به server وصل شود. در ابتدا باید همانند برنامهی server ، یک شی از سوکت ساخته و آن را به آدرسی که server در آن در حالت انتظار است، متصل نماییم.
import socket # Create an socket object. Family: Internet , Type: TCP mysock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # My system IP address (127.0.0.1) host = "localhost" port = 9393 # Connect to server addr = (host, port) mysock.connect(addr) # Recieve 1024 bytes servermsg = mysock.recv(1024) mysock.close() print (servermsg.encode('ascii'))
در برنامهی client نیز خانوادهی سوکت ساخته شده را اینترنت و نوع آن را برابر TCP قرار میدهیم. آدرسی که این سرویس گیرنده برای اتصال نیاز دارد، برابر همان آدرس سرویس دهنده میباشد. پس از اتصال به server، پیغام آن را دریافت و آن را دیکود کرده و سپس آن را نمایش میدهیم.
حال ابتدا برنامهی server و سپس client را اجرا میکنیم. خروجی این دو به صورت زیر است:
# Server output connection from: ('127.0.0.1', 59864) # Client output test message from server
بدین ترتیب این خروجی نمایش دهندهی اتصال موفقیت آمیز Client و Server با یکدیگر میباشد. همانطور که مشاهده میکنید، شماره پورت client عدد ۵۹۸۶۴ میباشد که این عدد به صورت تصادفی به آن اختصاص داده شده است. پس از اجرای این دو برنامه، server همچنان در حال اجرا میباشد که باید به صورت دستی آن را متوقف نمایید.
دیدگاهتان را بنویسید
برای نوشتن دیدگاه باید وارد بشوید.