السبت، 27 ديسمبر 2014

برمجة الشبكات في بايثون ارسال واستقبال البيانات

في الدرس السابق تعلمنا كيفية إنشاء مقبس والاتصال بالسيرفر ، وفي هذا الدرس سنتعلم كيفية إرسال واستقبال البيانات من والى السيرفر.
ولإرسال البيانات نقوم باستخدام الدالة sendall .
دعونا نقوم بإرسال بعض البيانات إلى قوقل .




import socket   #جلب مكتبة المقبس
import sys  
 
try:
    #create an AF_INET, STREAM socket (TCP)
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
except socket.error, msg:
    print 'Failed to create socket. Error code: ' + str(msg[0]) + ' , Error message : ' + msg[1]
    sys.exit();
 
print 'Socket Created'
 
host = 'www.google.com'
port = 80
 
try:
    remote_ip = socket.gethostbyname( host )
 
except socket.gaierror:
    print 'Hostname could not be resolved. Exiting'
    sys.exit()
     
print 'Ip address of ' + host + ' is ' + remote_ip
 
#الاتصال بالسيرفر
s.connect((remote_ip , port))
 
print 'Socket Connected to ' + host + ' on ip ' + remote_ip
 
#ارسال بعض البيانات الى السيرفر
message = "GET / HTTP/1.1\r\n\r\n"
 
try :
    #تعيين سلسلة كاملة 
    s.sendall(message)
except socket.error:
    #فشل الارسال
    print 'Send failed'
    sys.exit()
 
print 'Message send successfully'
في المثال السابق قمنا أولا بالاتصال بالسيرفر ثم قمنا بإرسال رسالة نصية "GET /HTTP/1.1\r\n\r\n" اليه والرسالة هي عبارة عن أمر خاص ييروتوكول http يقوم بجلب الصفحة الرئيسية للموقع.
الآن وبعدما قمنا بإرسال بعض البيانات إلى السرفر حان الوقت لنقوم باستقبال رد منه .

استقبال البيانات 
نقوم باستخدام الدالة recv لاستقبال البيانات على المقبس وفي المثال التالي نقوم بإرسال نفس البيانات التي قمنا بار سالها في المثال السابق مع استقبال الرد من السيرفر .

 
import socket   #جلب مكتبة المقبس
import sys  
 
try:
    #create an AF_INET, STREAM socket (TCP)
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
except socket.error, msg:
    print 'Failed to create socket. Error code: ' + str(msg[0]) + ' , Error message : ' + msg[1]
    sys.exit();
 
print 'Socket Created'
 
host = 'www.google.com'
port = 80
 
try:
    remote_ip = socket.gethostbyname( host )
 
except socket.gaierror:
    print 'Hostname could not be resolved. Exiting'
    sys.exit()
     
print 'Ip address of ' + host + ' is ' + remote_ip
 
#الاتصال بالسيرفر
s.connect((remote_ip , port))
 
print 'Socket Connected to ' + host + ' on ip ' + remote_ip
 
#ارسال بعض البيانات الى السيرفر
message = "GET / HTTP/1.1\r\n\r\n"
 
try :
    #تعيين سلسلة كاملة 
    s.sendall(message)
except socket.error:
    #فشل الارسال
    print 'Send failed'
    sys.exit()
 
print 'Message send successfully'
#استقبال البيانات
reply = s.recv(4096)
 
print reply
بعد تشغيل البرنامج إليك النتيجة
قام السيرفر بالرد وهو عبارة عن محتوى الصفحة التي طلبناها ، بسيطة أليس كذلك :)
الآن بعدما قمنا باستلام الرد من السيرفر حان وقت علق المقبس باستخدام الدالة s.close()

أليس من الرائع التعرف على كيفية عمل المتصفح لأنه يقوم بنفس العملية التي قمنا بها.
وجميع العمليات التي قمنا بها تتم عند الزبون حيث الزبون هو الذي يتصل بالسيرفر ليجلب لنا البيانات .
وفي المقابل هناك عمليات أخري خاصة بالسيرفر  وهو الذي يقوم باستقبال البيانات وإعادة إرسال بيانات أخرى على حسب الطلب ، وهذا يعني انه توجد عملية معاكسة تماما لتلك التي قمنا بها على الزبون وهذا ما سنقوم بتعلمه في الدرس القادم بحول الله .

هناك تعليق واحد:

  1. ربنا يزيدك كمان وكمان ويبارك فيك

    ردحذف

جلب البيانات من صفحة ويب باستخدام Selenium

  في هذا الدرس، سننشئ أداة لاستخراج البيانات من أي موقع ويب باستخدام Selenium. Selenium هو مشروع مفتوح المصدر يستخدم لأتمتة المتصفحات. وهو ي...