آموزش پایتون - برنامهنویسی شبکه
Python دو سطح دسترسی به خدمات شبکه را فراهم میکند. در سطح پایین، میتوانید به پشتیبانی سوکت پایه در سیستم عامل زیرین دسترسی داشته باشید که به شما امکان میدهد برای هر دو پروتکل اتصالگرا و بدون اتصال، کلاینت و سرور پیادهسازی کنید.
Python همچنین کتابخانههایی دارد که دسترسی سطح بالاتری به پروتکلهای شبکه سطح برنامه کاربردی خاص، مانند FTP، HTTP و غیره را فراهم میکند.
این فصل به شما درک مفهوم معروف در شبکه - برنامهنویسی سوکت را میدهد.
سوکت چیست؟
سوکتها انتهای یک کانال ارتباطی دوطرفه هستند. سوکتها میتوانند در یک فرآیند، بین فرآیندهای یکسان یا بین فرآیندهای قارههای مختلف ارتباط برقرار کنند.
سوکتها میتوانند بر روی تعداد مختلفی از کانالهای مختلف پیادهسازی شوند: سوکتهای حوزه یونیکس، TCP، UDP و غیره. کتابخانه socket کلاسهای خاصی را برای مدیریت حمل و نقلهای رایج و همچنین یک رابط عمومی برای مدیریت بقیه فراهم میکند.
سوکتها واژگان خاص خود را دارند:
ردیف | اصطلاح و توضیح | |
---|---|---|
1 | حوزه | خانواده پروتکلهایی که به عنوان مکانیزم حمل و نقل استفاده میشود. این مقادیر ثابتهایی مانند AF_INET، PF_INET، PF_UNIX، PF_X25 و غیره هستند. |
2 | نوع | نوع ارتباطات بین دو انتهای، معمولاً SOCK_STREAM برای پروتکلهای اتصالگرا و SOCK_DGRAM برای پروتکلهای بدون اتصال است. |
3 | پروتکل | معمولاً صفر، این ممکن است برای شناسایی یک نوع پروتکل در یک حوزه و نوع استفاده شود. |
4 | نام میزبان | شناسه یک رابط شبکه: |
- | یک رشته، که میتواند یک نام میزبان، یک آدرس نقطهای-چهار یا یک آدرس IPV6 در نگارش دو نقطهای (و ممکن است نقطه) باشد | |
- | یک رشته "<broadcast>"، که یک آدرس INADDR_BROADCAST را مشخص میکند. | |
- | یک رشته با طول صفر، که INADDR_ANY را مشخص میکند، یا | |
- | یک عدد صحیح، که به عنوان یک آدرس دودویی در نظم بایت میزبان تفسیر میشود. |
ماژول socket
برای ایجاد یک سوکت، باید از تابع socket.socket() موجود در ماژول socket استفاده کنید، که دارای سینتکس عمومی زیر است:
s = socket.socket (socket_family, socket_type, protocol=0)
برنامهنویسی شبکه در پایتون
پایتون دو سطح دسترسی به خدمات شبکه را فراهم میکند. در سطح پایین، میتوانید به پشتیبانی سوکت پایه در سیستم عامل زیرین دسترسی داشته باشید که به شما امکان میدهد برای هر دو پروتکل اتصالگرا و بدون اتصال، کلاینت و سرور پیادهسازی کنید.
پایتون همچنین کتابخانههایی دارد که دسترسی سطح بالاتری به پروتکلهای شبکه سطح برنامه کاربردی خاص، مانند FTP، HTTP و غیره را فراهم میکند.
این فصل به شما درک مفهوم معروف در شبکه - برنامهنویسی سوکت را میدهد.
سوکت چیست؟
سوکتها انتهای یک کانال ارتباطی دوطرفه هستند. سوکتها میتوانند در یک فرآیند، بین فرآیندهای یکسان یا بین فرآیندهای قارههای مختلف ارتباط برقرار کنند.
سوکتها میتوانند بر روی تعداد مختلفی از کانالهای مختلف پیادهسازی شوند: سوکتهای حوزه یونیکس، TCP، UDP و غیره. کتابخانه socket کلاسهای خاصی را برای مدیریت حمل و نقلهای رایج و همچنین یک رابط عمومی برای مدیریت بقیه فراهم میکند.
سوکتها واژگان خاص خود را دارند:
ردیف | اصطلاح و توضیح | |
---|---|---|
1 | حوزه | خانواده پروتکلهایی که به عنوان مکانیزم حمل و نقل استفاده میشود. این مقادیر ثابتهایی مانند AF_UNIX یا AF_INET، PF_INET، PF_UNIX، PF_X25 و غیره هستند. |
2 | نوع | نوع ارتباطات بین دو انتهای، معمولاً SOCK_STREAM برای پروتکلهای اتصالگرا و SOCK_DGRAM برای پروتکلهای بدون اتصال است. |
3 | پروتکل | معمولاً صفر، این ممکن است برای شناسایی یک نوع پروتکل در یک حوزه و نوع استفاده شود. |
4 | نام میزبان | شناسه یک رابط شبکه: |
- | یک رشته، که میتواند یک نام میزبان، یک آدرس نقطهای-چهار یا یک آدرس IPV6 در نگارش دو نقطهای (و ممکن است نقطه) باشد | |
- | یک رشته "<broadcast>"، که یک آدرس INADDR_BROADCAST را مشخص میکند. | |
- | یک رشته با طول صفر، که INADDR_ANY را مشخص میکند، یا | |
- | یک عدد صحیح، که به عنوان یک آدرس دودویی در نظم بایت میزبان تفسیر میشود. |
ماژول socket
برای ایجاد یک سوکت، باید از تابع socket.socket() موجود در ماژول socket استفاده کنید، که دارای سینتکس عمومی زیر است:
```python socket.socket(socket_family, socket_type, protocol)
پارامترهای این تابع عبارتند از:
* **socket_family** : خانواده پروتکل. این میتواند AF_UNIX یا AF_INET باشد. * **socket_type** : نوع سوکت. این میتواند SOCK_STREAM یا SOCK_DGRAM
#!/usr/bin/python # This is server.py file
import socket # Import socket module
s = socket.socket() # Create a socket object
host = socket.gethostname() # Get local machine name
port = 12345 # Reserve a port for your service.
s.bind((host, port)) # Bind to the port
s.listen(5) # Now wait for client connection.
while True:
c, addr = s.accept() # Establish connection with client.
print 'Got connection from', addr
c.send('Thank you for connecting')
c.close() # Close the connection
یک کلاینت ساده
بیایید یک برنامه کلاینت بسیار ساده بنویسیم که به یک پورت 12345 و میزبان داده شده، اتصال برقرار میکند. این بسیار ساده است که یک کلاینت سوکت را با استفاده از تابع ماژول socket پایتون ایجاد کنیم.
تابع socket.connect(hostname, port) یک اتصال TCP به hostname در port باز میکند. هنگامی که یک سوکت باز دارید، میتوانید از آن مانند هر شیء IO بخوانید. هنگامی که کارتان تمام شد، به یاد داشته باشید که آن را ببندید، همانطور که یک فایل را میبندید.
کد زیر یک کلاینت بسیار ساده است که به یک میزبان و پورت داده شده متصل میشود، هر داده موجود را از سوکت میخواند و سپس خارج میشود:
```python import socket host = "localhost" port = 12345 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((host, port)) data = s.recv(1024) print(data) s.close()
#!/usr/bin/python # This is client.py file
import socket # Import socket module
s = socket.socket() # Create a socket object
host = socket.gethostname() # Get local machine name
port = 12345 # Reserve a port for your service.
s.connect((host, port))
print s.recv(1024)
s.close() # Close the socket when done
اکنون این server.py را در پسزمینه اجرا کنید و سپس client.py را برای مشاهده نتیجه اجرا کنید.
**English equivalents of specialized Python words:**
* server = سرور
* client = کلاینت
* background = پسزمینه
* result = نتیجه
# Following would start a server in background.
$ python server.py &
# Once server is started run client as follows:
$ python client.py
این نتیجه زیر را تولید میکند:
Got connection from ('127.0.0.1', 48437)
Thank you for connecting
ماژولهای اینترنت پایتون
فهرستی از برخی از ماژولهای مهم در برنامهنویسی شبکه/اینترنت پایتون.
پروتکل | عملکرد رایج | پورت شماره | ماژول پایتون |
---|---|---|---|
HTTP | صفحات وب | 80 | httplib, urllib, xmlrpclib |
NNTP | اخبار Usenet | 119 | nntplib |
FTP | انتقال فایل | 20 | ftplib, urllib |
SMTP | ارسال ایمیل | 25 | smtplib |
POP3 | دریافت ایمیل | 110 | poplib |
IMAP4 | دریافت ایمیل | 143 | imaplib |
Telnet | خطوط فرمان | 23 | telnetlib |
Gopher | انتقال اسناد | 70 | gopherlib, urllib |
لطفاً همه کتابخانههای ذکر شده در بالا را برای کار با پروتکلهای FTP، SMTP، POP و IMAP بررسی کنید.