تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
سلسلة دروس في إحتراف الوينسوك ( موضوع متجدد )
#3
الدرس الثالث

الجزء الأول :




برمجة برنامج محادثة .


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

فكرة البرنامج :

إقتباس : الإعتماد على إرسال واستقبال البيانات .
عرض البيانات بصورة تشبه الماسنجر .

المميزات :

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

ضروريات لبرنامج المحادثة :

نستطيع في برنامج المحادثة إرسال البيانات بهذه الصورة


PHP كود :
Winsock1.sendData Text1.text 


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


خطوات إرسال البيانات في برنامج المحادثة ( وليست الطريقة الوحيدة ) .

اقتباس: تعريف ( إجراء Sub ) مهمته الإرسال .
كتابة البيانات في صندوق نص .
إرسال البيانات ، وعرضها في صندوق المحادثة + الإسم .

خطوات إستقبال البيانات :

إقتباس : تعريف متغير من يحمل قيمة نصية .
إسناد البيانات القادمة إليه .
إستقبال البيانات وعرضها في صندوق المحادثة + الإسم
.

ملاحظة : *
إقتباس : هذه الخطوات هي شاملة لكلا الطرفين ( العميل والخادم ) .
* تقنية الإتصال هي ( الإتصال العكسي ) .



العميل :

في برنامج العميل نحتاج للأدوات التالية :

أداة الوينسوك .
صندوقي نص الأول لعرض البيانات و تكون خصائصه كالتالي
اقتباس: Multiline = true , Locked = true , Scrollbars = 2- vertical, Name = txtData.

أما بالنسبة لصندوق النص الآخر فتكون خصائصه كالتالي :

إقتباس :Name = txtSend

و

ليبل .
تايمر ( Interval = 1 ) .
زر أمر للإرسال .

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




النص البرمجي :




في قسم التصريحات العامة :

PHP كود :
Sub SendData (data As String
On Error Resume Next 
Winsock1
.SendData data vbCrLf 
TxtData 
txtData "Client> " data vbCrLf 
End Sub 


حيث إنه عبارة عن إجراء يقوم بجعل الوينسوك ترسل البيانات عند إستدعاءه .

في زر الأمر ( إرسال ) :

PHP كود :
If txtSend.Text <> "" Then 
SendData txtSend
.Text 
TxtSend
.text "" 
End If 


حيث إنه يقوم بإستدعاء الإجراء SendData ويقوم بإرسال البيانات الموجوة في TxtSend .

في الحدث Change الخاص بصندوق النص TxtData :


PHP كود :
txtData.SelStart Len(txtData.Text



في الحدث DataArrival للوينسوك :


PHP كود :
Dim ChatData as String 
Winsock1
.GetData ChatData 
TxtData 
txtData "Server> " ChatData 



تم الإنتهاء من برنامج العميل .

الخادم :

في الخادم نحتاج للأدوات التالية :

أداة الوينسوك .
تايمر ( Interval = 3000 ) . ( نوع الإتصال : عكسي )
4 صندوق نص .
1 زر كوماند .

وتكون لها نفس الخصائص البرمجية في برنامج العميل .


النص البرمجي :

في قسم التصريحات العامة :


PHP كود :
Sub SendData (data As String
On Error Resume Next 
Winsock1
.SendData data vbCrLf 
TxtData 
txtData "Server> " data vbCrLf 
End Sub 


في زر الأمر ( إرسال ) :

PHP كود :
If txtSend.Text <> "" Then 
SendData txtSend
.Text 
TxtSend
.text "" 
End If 


في الحدث Change الخاص بصندوق النص TxtData :


PHP كود :
txtData.SelStart Len (txtData.Text

في الحدث DataArrival للوينسوك :


PHP كود :
Dim ChatData as String 
Winsock1
.GetData ChatData 
TxtData 
txtData "Client> " ChatData 

تم الإنتهاء من برنامج الخادم .

الجزء الثاني :

طريقة أخرى لبرنامج المحادثة :

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

إقتباس : - فصل البيانات .
- طريقة إرسال البيانات التقليدية .

- فصل البيانات :

يتم فصل البيانات بعدة دوال ومنها Mid , Left , Right ، وفي موضوعنا سنستخدم الدالة Left + الدالة Right

لفرض أن العميل أرسل الأمر Sip + محتوى صندوق نص على الشكل التالي :

PHP كود :
Winsock1.sendData "Sip" Text1.text 


فإذا قمنا بإستقبال البيانات على هذا الشكل


PHP كود :
Winsock1.getData Data 
MsgBox Data 


ووضعناها في MsgBox فإنه يتم عرض الأمر Sip في الرسالة ، وهذا ما لا نريده ، لذلك يجب إلغاء الأمر Sip من البيانات .

مثال

PHP كود :
Dim Dat as String 
Winsock1
.GetData Dat 
If Left (Dat3) = "Sip" Then 
Dat 
Right (DatLen (Dat– 3
Text2.Text Dat 
End 
If 



حيث إن :

تم تعريف المتغير Dat لإسناد البيانات القادمة إليه .
في الجملة الشرطية If يتم فحص المتغير Dat فإن كانت سلسلته النصية من جهة اليسار تحتوي على الأمر Sip فإنه يتم أخذ الجزء Right وإقتطاع 3 أحرف من طول السلسلة ،
ووضع الباقي في صندوق نصي .
وهكذا تجري الأمور .

----

برنامج المحادثة :

في كلا البرنامجين نضع نفس الأدوات الموجودة في المثال السابق ، وطبعا يكون الإختلاف في الأكواد فقط . ولكن نقوم بإضافة زر أمر وصندوق نص في برنامج العميل لكي نوضح مثال فصل البيانات .
سيكون المثال عبارة عن برنامج المحادثة + التحكم في شاشة Run ( من قائمة إبدأ ) .
ويكون إسمه ( فتح التطبيق ) .

النص البرمجي : معظم الأكواد هي نفسها في البرنامج السابق ولكن الإختلاف يكون في زر الأمر ( إرسال ) وزر الأمر الجديد ( فتح التطبيق ) .


(قم بإضافة أكواد الإتصال إلى البرنامج ) .


في زر الأمر ( إرسال ) :


PHP كود :
On Error Resume Next 
Winsock1
.SendData "Cht" txtSend.Text vbCrLf 
txtData
.Text txtData.Text " Client :> "txtSend.Text vbCrLf 


في زر الأمر ( فتح ) :


PHP كود :
On Error Resume Next 
Winsock1
.SendData "Dos" Text1.Text 




في الحدث DataArrival الخاص بالوينسوك :



PHP كود :
On error resume next  
Dim Dat 
as String 
Winsock1
.GetData Dat 
If Left (Dat3) = "cht" Then 
Dat 
Right (DatLen (Dat– 3
txtData.Text txtData.Text " Server :> "Dat vbCrLf 
End 
If 





الخادم :

في زر الأمر ( إرسال ) :



PHP كود :
On Error Resume Next 
Winsock1
.SendData "cht" TxtSend.Text vbCrLf 
TxtData
.Text TxtData.Text " Server :> "TxtSend.Text vbCrLf 


في الحدث DataArrival الخاص بالوينسوك :

PHP كود :
On error resume next  
Dim Dat 
as String 
Winsock1
.GetData Dat 
If Left (Dat3) = "cht" Then 
Dat 
Right (DatLen (Dat– 3
txtData.Text txtData.Text " Client :> "Dat vbCrLf 
End 
If 
If 
Left (Dat3) = "Dos" Then 
Dat 
Right (DatLen (Dat– 3
Shell Dat 
End 
If 

تم إنهاء برنامج المحادثة ، تستطيع تجربته مع أصدقائك .
متغيب
الرد }}}
تم الشكر بواسطة:


الردود في هذا الموضوع
سلسلة دروس في إحتراف الوينسوك ( موضوع متجدد ) - بواسطة Ahmad Jawad_mybb_import4460 - 17-09-12, 10:06 PM

المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  سلسلة دروس الحماية ( للمبتدئين , المتوسطين , المتقدمين ) + تطبيقات جاهزة للاستخدام Ahmad Jawad 6 8,011 02-06-16, 11:45 AM
آخر رد: CLARO

التنقل السريع :


يقوم بقرائة الموضوع: