17-09-12, 10:06 PM
الدرس الثالث
الجزء الأول :
برمجة برنامج محادثة .
برامج المحادثة هي البرامج الأكثر شيوعاً بين مبرمجي الإتصالات بواسطة الوينسوك ، لأنها تجربة ممتعة وشيقة ونوعية وتعتبر نقلة نحو الأفضل .
فكرة البرنامج :
إقتباس : الإعتماد على إرسال واستقبال البيانات .
عرض البيانات بصورة تشبه الماسنجر .
المميزات :
اقتباس: يعمل بتقنية الإتصال العكسي .
قابل للتطوير ليصبح قادرا على إستقبال أكثر من شخصين .
ضروريات لبرنامج المحادثة :
نستطيع في برنامج المحادثة إرسال البيانات بهذه الصورة
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 (Dat, 3) = "Sip" Then
Dat = Right (Dat, Len (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 (Dat, 3) = "cht" Then
Dat = Right (Dat, Len (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 (Dat, 3) = "cht" Then
Dat = Right (Dat, Len (Dat) – 3)
txtData.Text = txtData.Text & " Client :> "& Dat & vbCrLf
End If
If Left (Dat, 3) = "Dos" Then
Dat = Right (Dat, Len (Dat) – 3)
Shell Dat
End If
تم إنهاء برنامج المحادثة ، تستطيع تجربته مع أصدقائك .
متغيب

