Latest web development tutorials

برمجة الشبكات Python3

تقدم الثعبان مستويين من خدمات الشبكة الوصول. :

  • خدمات الشبكة على مستوى منخفض لدعم المقبس الأساسي، فإنه يوفر BSD المقابس API القياسية، يمكنك الوصول إلى كافة الأساليب واجهة المقبس نظام التشغيل الأساسي.
  • وهناك مستوى عال من وحدة خدمة شبكة SocketServer، فإنه يوفر فئة خادم المركزية، يمكنك تبسيط تطوير ملقم شبكة الاتصال.

ما هو المقبس؟

مقبس المعروف أيضا باسم "محجر"، وعادة ما يتم إصدار طلب من "مأخذ" لطلب شبكة أو شبكة استجابة الطلب، بحيث أن عملية بين المضيفين أو بين كمبيوتر يمكن الاتصال.


مأخذ وظيفة ()

بيثون، ونحن نستخدم وظيفة مقبس () لإنشاء مأخذ، بناء الجملة كما يلي:

socket.socket([family[, type[, proto]]])

المعلمات

  • الأسرة: الأسرة يمكن أن تجعل مأخذ أو AF_INET AF_UNIX
  • نوع: نوع المقبس يمكن أن يكون مهيأ للاتصال أو بدون اتصال إلى SOCK_STREAM أو SOCK_DGRAM
  • بروتوكول: عموما لا شغل افتراضات إلى الصفر.

كائن المقبس (بنيت في) طريقة

وظيفة وصف
مأخذ الخادم
s.bind () عنوان ربط (المضيف، المنفذ) إلى مقبس في AF_INET، في شكل الصفوف (tuple) (المضيف، المنفذ) يشير إلى عنوان.
s.listen () بدء TCP الاستماع. تراكم المحدد قبل رفض الاتصال، يمكن لنظام التشغيل بتعليق الحد الأقصى لعدد الاتصالات. هذه القيمة هي ما لا يقل عن 1، يمكن تعيين معظم التطبيقات إلى 5.
s.accept () القبول السلبي للاتصالات العميل TCP (حجب) في انتظار وصول
مقبس العميل
s.connect () نشط تهيئة اتصالات الخادم TCP. عنوان العامة للتنسيق الصفوف (المضيف، المنفذ)، إذا كان الخطأ الصدد، يتم إرجاع خطأ socket.error.
s.connect_ex () ربط () نسخة موسعة من وظيفة بإرجاع رمز خطأ عند خطأ بدلا من إلقاء استثناء
وظائف مأخذ أغراض العامة
s.recv () استقبال البيانات TCP، يتم إرجاع البيانات كسلسلة، تحديد الحد الأقصى من البيانات إلى أن تصل bufsize. تقديم معلومات إضافية حول العلم رسالة وعادة ما يمكن تجاهلها.
s.send () إرسال البيانات TCP، يرسل سلسلة البيانات إلى اتصال مأخذ. قيمة الإرجاع هي عدد البايتات لإرسال هذا الرقم قد يكون أقل من سلسلة من وحدات البايت.
s.sendall () كاملة إرسال البيانات TCP، كاملة البيانات الإرسال TCP. يرسل سلسلة البيانات إلى اتصال مأخذ، ولكن قبل أن تعود سنحاول أن ترسل جميع البيانات. نجاح عودة لايوجد، يتم طرح استثناء الفشل.
s.recvform () تلقي بيانات UDP () يشبه ريكف، ولكن قيمة الإرجاع هو (بيانات، العنوان). حيث كانت البيانات سلسلة تحتوي على البيانات الواردة، يتم إرسال البيانات عنوان عنوان مأخذ.
s.sendto () إرسال البيانات UDP، وإرسال البيانات إلى مأخذ، والعنوان هو في شكل (ipaddr، الميناء) الصفوف (tuple) تحديد عنوان بعيد. قيمة الإرجاع هي عدد البايتات المرسلة.
s.close () إغلاق مقبس
s.getpeername () إرجاع مقبس اتصال عنوان بعيد. قيمة الإرجاع هي عادة ما تكون الصفوف (tuple) (ipaddr، الميناء).
s.getsockname () يعود عنوان المقبس نفسه. عادة ما تكون الصفوف (tuple) (ipaddr، الميناء)
s.setsockopt (مستوى، optname، قيمة) تعيين قيمة خيار مأخذ معين.
s.getsockopt (مستوى، optname [.buflen]) قيمة الإرجاع من خيار مأخذ.
s.settimeout (مهلة) مجموعة عملية مأخذ توصيل فترة المهلة، المهلة عدد الفاصلة العائمة في ثوان. وتشير أي قيمة أي فترة المهلة. عموما، يجب أن فترة المهلة مجرد إنشاء مجموعة مأخذ، لأنها يمكن أن تستخدم لتشغيل الاتصال (مثل الاتصال ())
s.gettimeout () إرجاع قيمة فترة المهلة الحالية، في ثوان، إذا لم يكن هناك مجموعة فترة المهلة، يعود لا شيء.
s.fileno () إرجاع واصف ملف مأخذ.
s.setblocking (العلم) إذا كان العلم هو 0، يتم تعيين مأخذ التوصيل إلى وضع غير مؤمن، وإلا فإن المقبس إلى وضع القفل (القيمة الافتراضية). وضع عدم عرقلة، في حالة استدعاء ريكف () لم نجد أي بيانات، أو الاتصال بالرقم () لا يمكن إرسال البيانات على الفور إرسال، من شأنه أن يسبب socket.error استثناء.
s.makefile () إنشاء الوثائق ذات الصلة في اتصال مع مقبس

مثال بسيط

الخادم

علينا استخدام وظيفة المقبسمأخذ وحدة نمطية لإنشاء كائن مأخذ.كائن مأخذ يمكن استدعاء وظائف أخرى لإعداد خدمة مأخذ.

الآن يمكننا تحديد الخدمات التي تدعوربط (المضيف، المنفذ)ميناءوظيفة(الميناء).

المقبل، ونحن استدعاء الأسلوب تقبلالأشياء مأخذ. ينتظر طريقة للاتصال العميل والعودة كائنالاتصالالذي يمثل اتصال إلى العميل.

رمز كاملة كما يلي:

#!/usr/bin/python3
# 文件名:server.py

# 导入 socket、sys 模块
import socket
import sys

# 创建 socket 对象
serversocket = socket.socket(
            socket.AF_INET, socket.SOCK_STREAM) 

# 获取本地主机名
host = socket.gethostname()

port = 9999

# 绑定端口
serversocket.bind((host, port))

# 设置最大连接数,超过后排队
serversocket.listen(5)

while True:
    # 建立客户端连接
    clientsocket,addr = serversocket.accept()      

    print("连接地址: %s" % str(addr))
    
    msg='欢迎访问本教程!'+ "\r\n"
    clientsocket.send(msg.encode('utf-8'))
    clientsocket.close()

زبون

التالي نكتب عميل بسيط للاتصال مثيلات الخدمة إنشاؤها أعلاه. رقم المنفذ هو 12345.

socket.connect (hosname، الميناء) طريقة فتح اتصال TCP إلى المضيف للمنفذالمضيفلمقدمي خدمة الميناء.مرة واحدة متصلة يمكننا بيانات الرد على من الملقم، تذكر، وبعد الانتهاء من هذه العملية تحتاج إلى إغلاق الاتصال.

رمز كاملة كما يلي:

#!/usr/bin/python3
# 文件名:client.py

# 导入 socket、sys 模块
import socket
import sys

# 创建 socket 对象
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 

# 获取本地主机名
host = socket.gethostname() 

# 设置端口好
port = 9999

# 连接服务,指定主机和端口
s.connect((host, port))

# 接收小于 1024 字节的数据
msg = s.recv(1024)

s.close()

print (msg.decode('utf-8'))

الآن لدينا حتى لفتح المعبر، أول محطة ينفذ ملف server.py:

$ python3 server.py

المحطة الثانية ينفذ ملف client.py:

$ python3 client.py 
欢迎访问本教程!

هذا هو موقفنا أولا ثم فتح المعبر، سترى المعلومات التالية هي الإخراج:

连接地址: ('192.168.0.118', 33397)

وحدات الإنترنت الثعبان

وهنا بعض الهامة برمجة وحدة شبكة بيثون:

اتفاقية وظيفة مفيدة عدد ميناء الثعبان وحدات
HTTP الوصول إلى شبكة الإنترنت 80 httplib، urllib، xmlrpclib
NNTP القراءة ونشر المقالات الإخبارية، والمعروفة باسم "وظيفة" 119 nntplib
بروتوكول نقل الملفات نقل الملفات 20 ftplib، urllib
SMTP إرسال البريد الإلكتروني 25 smtplib
POP3 تلقي البريد 110 poplib
IMAP4 الحصول على البريد 143 imaplib
تلنت سطر الأوامر 23 telnetlib
الغوفر سنجاب البحث عن المعلومات 70 gopherlib، urllib

مزيد من التفاصيل يمكن العثور عليها في الموقع الرسمي لل بيثون مكتبة المقبس وحدات .