1

Similar documents
Microsoft Word - معادلــة مستقيــم

<4D F736F F D20DDCAC7E6EC20D4D1DAEDC920DDED20C8DAD620E4E6C7D2E120C7E1E3D3E1E3EDE420C7E1CCCFCF20E4D3CEC920E3DACFE1C9>

Cos I II Sin Sin - ENS - I IV 2 Cos 2017

Multiboot CD's & CD Shell

@fiî ñ Ïv ä a 1 = ( sr ) h s حيث (۱ قيمة الثابت h)

Socket Socket TcpClient Socket.Connect TcpClient.Connect Socket.Send / Receive NetworkStream 6-5

VoIP Make a Rtp Call VoIP Abstract... 2 VoIP RTP...3 Socket IP...9 Config Two Voice-hub






بسم الله الرحمن الرحيم

Voc Mowashahat

Microsoft Word - cexajuil08.doc

¹ ¹








Python a p p l e b e a r c Fruit Animal a p p l e b e a r c 2-2

(Methods) Client Server Microsoft Winsock Control VB 1 VB Microsoft Winsock Control 6.0 Microsoft Winsock Control 6.0 1(a). 2

关于建立境内违法互联网站黑名单管理制度的通知

? 這 全 都 是 市 政 府 提 供 給 我 的 資 料 低 底 盤 公 車 計 畫 96 年 預 算 新 台 幣 4,500 萬 元 97 年 預 算 新 台 幣 1 億 6,500 萬 元 98 年 預 算 新 台 幣 3 億 2,300 萬 元, 共 有 307 台 低 底 盤 公 車,99

1.15 当前职业 ( 可选多项 ) Current occupation(s) المھنة الحالیة 商人 Businessman موظف 公司职员 Company employee 工人 / 农民 Industrial/Agricultural worker موظفemployee

電腦做什麼事~第七章

数据结构与算法 - Python基础


了 波 涛 和 号 声 袁 读 者 很 容 易 就 进 入 广 州 城 的 水 上 旅 途 袁 进 入 一 座 野 水 上 名 城 冶 的 传 说 中 去 遥 于 是 袁 一 座 名 城 往 事 充 满 了 漂 流 感 袁 旋 律 自 水 上 而 来 袁 我 们 就 这 样 来 到 了 往 事 的

壹、摘 要

(4) 按语法理解规范朗读基础考察 即给段落文字打符号, 占比 25/240 主要考察考生对句中单词根据其语法地位的尾符变化情况, 工具词导致的动词 名词尾符变化情况, 单词词型的规范读音等方面的掌握情况 是很具有阿拉伯语言特色的经典考察方式 (5) 汉阿互译能力考察, 属于主观题, 占比 50/2

筆 已 知 的 資 料? ( 1 ) T C P ( T r a n s m i s s i o n C o n t r o l P r o t o c o l ) 不 提 供 下 列 那 一 項 服 務? 1 最 小 頻 寬 保 證 ( M

1 6. ( 3 ) 軟 體 測 試 用 以 評 估 系 統 在 短 時 間 內 可 承 受 的 限 度, 此 種 測 試 常 被 稱 為 下 列 何 者? 1 黑 箱 測 試 ( B l a c k B o x T e s t i n g ) 2 迴 歸 測 試 ( R e g r e s s i

完成正副朝的形式

{ي ا ا ي ه ا ال ناس ات ق وا ر ب ك م ال ذ ي خ ل ق ك م م ن ن ف س و اح د ة و خ ل ق م ن ه ا ز و ج ه ا و ب ث م ن ه م ا ر ج الا ك ث يرا و ن س اء و ات ق وا ا

48 th اﺣﺘﻔﺎﻻ ﺑﺎﻟﻌﻴﺪ اﻟﻮﻃﻨﻲ ﹰ Ex cl us iv e Celebrating Oman National Day ﺣ ﺼ ﺮﻳ 48 Built-in New Launch! Now Available! Get SELFIE STICK OR WristBand V

ebook

KitaboSunnat.com -- Munafiqeen Ka Kirdar aur Alaamaat

0000Book_D10YB.indb

Data Server_new_.doc

untitled

Microsoft PowerPoint - paper15 [Compatibility Mode]

Microsoft Word - ÃÍãÏ ÇáãÒÌÇÌí_3333.doc

第 1 章 概 述 1.1 计 算 机 网 络 在 信 息 时 代 中 的 作 用 1.2 计 算 机 网 络 的 发 展 过 程 *1.2.1 分 组 交 换 的 产 生 *1.2.2 因 特 网 时 代 *1.2.3 关 于 因 特 网 的 标 准 化 工 作 计 算 机 网 络 在

<4D F736F F F696E74202D20A1B6CFEEC4BFD2BB20B3F5CAB6BCC6CBE3BBFACDF8C2E7A1B7C8CECEF1C8FD20CAECCFA A1A24950D0ADD2E9BACD4950B5D8D6B72E707074>

KL DSC DEMO 使用说明

( 含 要 ) 1-2 用 或 雇 用, 抑 或 有 無 俸 給 文 職 或 武 職, 政 官 或 事 官 均 屬 之, 其 不 以 具 備 人 資 格 為 限, 因 此 屬 於 最 廣 義 之 念 四 廣 義 念 之 依 服 24 條 之 規 定 : 本 於 受 有 俸 給 之 文 武 職, 及

<4D F736F F D20CFD1C7D3C920DAE420C7E1CAE6CDCF2E646F63>

穨CAS1042中文手冊.doc

گزارش گمان شکن

Microsoft PowerPoint - os_4.ppt

utente debole? protezioni forti! Ti sposti su due ruote? I segnali stradali valgono anche per te. Impara a rispettarli Fatti vedere! Se cammini, corri

Safety Notice * Don t touch the Head of printer with anything. * Don t touch the cutter blade. * Don t bend the power cord excessively or place any he


穨CAS1042快速安速說明.doc

HADA4 01 March 2018

Go构建日请求千亿微服务最佳实践的副本

ebook140-8

Microsoft Word - 11.doc

, 史密斯亲爱的约翰 عزيزي السيد مجدي ا حمد Minder formeel, men heeft reeds zaken met de geadresseerde gedaan, 亲爱的约翰 عزيزي مجدي Informeel, men is bevriend met d

朝觐——الحج

untitled

Transcription:

1

بسم االله الرحمان الرحيم الفھرس: مقدمة. برمجة سكریبت الخادم. برمجة سكریبت الزبون. تطبیق البرنامج في شبكة محلیة استعمال تقنیة threading - - - - - 2

-1 المقدمة : لابد انك في یوم احتجت لربط بین برامجك وربما استعملت ملف خارجي لعمل اتصال مثلا ملف نصي او ملف قواعد بیانات خارجي لاستقبال نص اخر من برنامج اخر لكن ھل فكرت في طریقة اخرى نعم توجد طریقة اخرى وھي باستخدامsocket لكن ما معنى socket ھي التقنیة والوسیلة الفعالة التي تمكننا من عمل شبكة بین تطبیقات سواء شبكة محلیة او على الانترنت وھي تستعمل كثیرا في الالعاب ligner) jeux )و en كل ما ھو متعلق بالربط بین تطبیقات برمجة socketمتوفرة في الكثیر من لغات البرمجة سي جافا... 3

فكما تعلم تعتبر لغة البایثون من اقوى اللغات في التعامل مع الشبكات وبرمجتھا بحیث انھا توفر العدید من المكتبات التي المتخصصة في ذالك من ھاتھ المكتبات مكتبة socket سنتمكن من خلالھا من كتابة برامج تستطیع الا تصال عبر الشبكة "low socket programming". ارید ان اوضح في البدایة برامترین مھمین في socket address_family: AF_INET :العناوین الخاصة ببرتوكول IP الا صدارة الرابعة IP : AF_INET6 العناوین الخاصة ببرتوكول الا صدارة.السادسة. AF_UNIX : ھذه العناوین خاصة با نظمة لینكس 4

protocol: البرتوكول الذي سیتم أستخدامھ في الا تصال : SOCK_STREAM برتوكول TCPھذا الذي سنعمل بھ UDP SOCK_DGRAM :برتوكول توجد فرق بینھم لكن لا یمكن الخوض فیھم لكي لا نخرج من موضعنا 5

المھم و مھما اختلفت اللغات و تعقدت یبقى المبدأ واحد كما سیوضحھ المخطط الا تي 6

2- برمجة سكریبت الخادم : ملاحظات: -قمت باستخدام البرمجة الموجھة (كلاس میتود = طریقة) لكن یمكن استخدام برمجة الا جراي یة في برمجتھ المھم ھو فھم المبدأ. -استعملت في السكریبت 127.0.0.1 : ip ھو للجھاز المحلي یعني لجھازك الخاص و ھو اي بي المرافق للعنوان التالي.localhost Python ھنا نقوم باستدعاء المكتبة// import socket نقوم بتعریف كلاس جدید// sof1ane_serveur(object): class ھنا المشید والبرامترات الخاصة// port=8080): def init (self, host='', ارجاع قیم الھوست و بورت// self._host, self._port=host, port self.address=(host, port) متغیر من نوع قاي مة وارجاع قیم الھوست وبورت فیھ // self.sock=socket.socket(socket.af_inet, socket.sock_stream) ھا نقوم بتحدید كل من// socket types et address (and protocol) families self.sock.setsockopt(socket.sol_socket, socket.so_reuseaddr, 1) ھنا یجب تفعیل SO_REUSEADDR لیتم غلق البورت بعد غلق السیرفر// عدم استخدام ھذا المر یو دي الى حدوث خطا في تشغیل السكریبت مرة اخرى تحت عنوان البورت مشغول تعریف میتود جدید // demarrer(self): def 7

self.sock.bind(self.address) ربط العنوان الخاص بالخادم الذي یتم تنفیذ البرنامج علیھ // self.sock.listen(1) تجھیز الخادم لاستقبال الاتصالات منالشبكة مع تحدید عدد معین للاتصالات لاستقبالھا// print "Server s'executant sur: ", self._port self.gerer_con() نستدعي الطریقة تسییر الاتصال الذي سنتطرق الیھا // def handle_request(self): تعریف الطریقة تسییر الاتصال // while True: حلقة غیر منتھیة لانتظار الاتصال// clientsock, addr=self.sock.accept() لحضة قبول الا تصال نستقبل عنوان الا ي بي الخاص بالعمیل و مع توفیر منفذ محلي // ملاحظة للطریقة accept() اھمیة كبیرة نضرا لانھا ترجع لنا كاي ن العمیل مع عنوانھ print "Connexion à partir de: ", addr clientsock.sendall(str(addr)+" vous etes connecte au serveur...") ارسال رسالة نجاح الاتصال // while True: msg=clientsock.recv(100) تستخدم send et recv الطریقة مع الكاي ن الذي انشا تھ// accept() و 100 تمثل عدد الاحرف القصوى في كل رسالة ارسال رمز << // if msg: print ">> ", msg clientsock.sendall(msg) الذي یبین جاھزیة استقبال الرساي ل للعمیل 8

clientsock.close() if name ==" main ": try: serveur=sof1ane_serveur() serveur.start() except KeyboardInterrupt: exit() تنفیذ البرنامج الري یسي مع التعامل مع الاخطاء في حال حدوثھا // 3 -برمجة سكریبت : العمیل Python ھنا نقوم باستدعاء المكتبة// import socket نقوم بتعریف كلاس جدید//:( SimpleClient(object class def init (self, endpoint=('127.0.0.1', 8080)): ھنا المشید والبرامترات الخاصة// self._endpoint=endpoint ارجاع قیم الھوست و بورت// self.sock=socket.socket(socket.af_inet, socket.sock_stream) ھا نقوم بتحدید كل من// socket types et address (and protocol) families المشروحة في المقدمة في الموضوع الا ول self.sock.connect(self._endpoint) نقوم بعمل الاتصال مع السیرفر عن طرق المنھج //connect def start(self): while True: نقوم بفتح حلقة اتصال مع السیرفر // data=self.sock.recv(8096) ارسال و استقبال البیانات// if not data: break print data msg=raw_input("> ") if not msg: 9

break self.sock.send(msg) غلق الاتصال // self.sock.close() if name ==" main ": تنفیذ البرنامج الري یسي مع التعامل مع الاخطاء في حال حدوثھا // try: sc=simpleclient() sc.start() except KeyboardInterrupt: exit() 4 -تطبیق البرنامج في شبكة محلیة : ھنا لا نحتاج سوى تحدید عنوان اي بي والبورت الصور 10

5 -استعمال تقنیة :Threading 5.1- برمجة سكریبت الخادم : نلاحظ حین القیام بفتح حلقة اتصال مع السیرفر یكون البرنامج في حالة انتظار لایمكن لا ارسال لھ ولا عمل أي عمل اخر بحیث یقوم المعالج بفتح الحلقة اتصال وبس. لتوضیح اكثر مثلا اذا طلبت من المستعمل كتابة اسمھ عن طریق inputیبقى السكریبت متوقف الى غایة ادخال اسمھ لا یمكنھ عمل اي عملیة اخرى وھذا یعد عیب في البرنامج. سنحاول في تطبیقنا باستعمال تقنیة threadلكي ینفذ كل عملیھ في (process) منفصل نخبر المعالج ان أي یمكن فتح أكثر من حلقة في نفس الوقت او مثلا فتح حلقة و في نفس الوقت اظھار نص مثلا. 11

1. import socket,threading 2. class sof1ane_serveur(object): 3. def init (self, host, port): 4. self._host, self._port=host, port 5. self.address=(host, port) 6. self.sock=socket.socket(socket.af_inet, socket.sock_stream) 7. self.sock.setsockopt(socket.sol_socket, socket.so_reuseaddr, 1) 8. def start(self): 9. self.sock.bind(self.address) 10. self.sock.listen(5) 11. print "Server s'executant sur: ", self._port 12. self.gerer_con() 13. def gerer_con(self): 14. try: 15. while True: 16. clientsock, addr=self.sock.accept() 17. print "Connexion? partir de: ", addr 18. clientsock.sendall(str(addr)+" vous etes connecte au serveur...") 19. self.th1 = threading.thread(target=self.thread1, args=[clientsock]) 20. self.th2 = threading.thread(target=self.thread2, args=[clientsock]) 21. self.th1.start() 22. self.th2.start() 23. except: 24. exit() 25. def thread1(self,clientsock): 26. try: 27. while True: 28. msg=clientsock.recv(2048) 29. if not msg: 30. break 31. print ">", msg 32. self.sock.close() 33. except: 34. exit() 35. def thread2(self,clientsock): 36. try: 37. while True: 38. mesg = raw_input(">") 39. if not mesg: 40. break 41. clientsock.send('serveur dit :'+mesg) 42. self.sock.close() 43. except: 44. exit() 45. if name ==" main ": 46. try: 47. serveur=sof1ane_serveur('',23456) 48. serveur.start() 49. except: 50. exit() 5.2 12

برمجة سكریبت : الزبون -5.2 1. import socket,threading 2. class project(object): 3. def init (self,ip_port): 4. def recev(self): while 1: self.ip_port = ip_port self.sock = socket.socket(socket.af_inet,socket.sock_stream) self.sock.connect(self.ip_port) msg_rec = self.sock.recv(8096) if not msg_rec: break print msg_rec 5. self.sock.close() 6. def env(self): while 1: msg_env = raw_input("==>") if not msg_env: break self.sock.send(msg_env) self.sock.close() 7. if name ==" main ": 8. print("saisie l'adress IP et le port") 9. ip_port_saisie=input() 10. object_projet = project(ip_port_saisie) 11. thread1 = threading.thread(target=object_projet.env, args=[]) 12. thread2 = threading.thread(target=object_projet.recev, args=[]) 13. thread1.start() 14. thread2.start() 13

الصور لمعالجة اكثر من اربعة اتصالات بعض 14