تطبيق :هذا التطبيق تم بنائه ببروتوكول UDP نضرا لقابلية هذا البروتوكول على البث الجماعي
لا يستطيع اي شخص معرفة عناوين بقية الاشخاص الذين يملكون برنامج المحادثة ليتحادث مع من يحب بطريقة اعتيادية لذالك. لكي يتمكن الشخص ان يتحدث مع من يحب داخل الشبكة نكون server index كل شخص يشغل برنامج المحادثة يسجل اسمه وعنوان عند server index ويعطيه اسماء وعنوانين بقية الاشخاص ضمن الشبكة حتى يستطيع محادثتهم محادثة شخصية عبر عناوينهم..ففي بدية الامر يرسل كل شخص يدخل الشبكة رسالة Broadcast الى الجميع يسئل عن الخادم فيستلم الجميع الرسالة فقط الخادم يجاوب على الرسالة ويعطيه ويعطيه اسماء وعنوانين بقية الاشخاص ضمن الشبكة....................
وهناك طريقة اخرى بدون server index يرسل الشخص رسالة Broadcast يستلمها كل المتواجدين على الشبكة واي شخص يستلم الرسالة يستطيع الاجابة عليها او هملها اذا اجاب عليها يرسل اسمه وعنوانه الى الشخص الذي عمل Broadcast وبذالك يكول لديه سجل باسماء وعناوين لكل المتواجدين داخل الشبكة
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXNaA1AjlJVC2zUBXCRaEJ759sI-Y7ZhB3Soy7JIoBQC8ZGs_Xn05_0Vr64T7-gtzn68CnxAZEFw_NKuMq1oqftC0-OmpcZEfxI2SG4Ro9MtCazNkz3lLbs7QR9TxsD_mPyccLRO2Ha8w/s640/imagnetwork22.png)
ثم نكون دالة لارسال رسالة الى كل المتواجدين داخل الشبكة تحوي اسم الشخص وعنوانه ورمز يدل على انها عملية طلب تعريف او طلب صداقة وهنا نستخدم الرمز $ ونحن مخيرين برموز. حتى المستلم يعرف ما نوع الرسالة هل هي طلب تعريف او تاكيد او بيانات اعتيادية استخدمنا هذا الرمز
وهذه دالة ارسال هذه الرسالة للجميع
الرسالة سنرسلها بشكل التالي(عنوانه =&&= اسم الشخص$) واستخدمنا =&&= حتى المستلم عندما يقرء بداية الرسالة ويعرف انها تبدء ب$ يعرف انها طلب من شخص ما لأضافته داخل قائمة الاصدقاء يستطيع ان يعرف اسم الشخص وعنوانه من خلال فصل الرسالة بدالة التالية
و GetIPAddress هي دالة كوناها في بداية الفصل لأيجاد عنوان الشخص ضمن الشبكة
عندما يستلم الاشخاص الرسالة فاذا قبولو الاضافة يرسلون اسمائهم وعناوينهم الى الشخص السائل ويضافون في قائمة الاصدقاء للطرفين واذا لم يقبلو الاضافة لا يجاوبين السائل شاهد الشكل
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXNaA1AjlJVC2zUBXCRaEJ759sI-Y7ZhB3Soy7JIoBQC8ZGs_Xn05_0Vr64T7-gtzn68CnxAZEFw_NKuMq1oqftC0-OmpcZEfxI2SG4Ro9MtCazNkz3lLbs7QR9TxsD_mPyccLRO2Ha8w/s640/imagnetwork22.png)
كود التنصت لكل شخص
نلاحظ انه اذا قبلو الصداقة يضاف اسم الشخص السائل وعنوانه الى قائمة الاصدقاء ويرسل له رسالة تحوي اسم الشخص الحالي وعنوانه مسبوق بعلامة % بشكل التالي (عنوانه =&&= اسم الشخص%) دال على انها رسالة تاكيد صداقة فعندما يستلم الشخص الذي ارسل طلب الصداقة هذه الرسالة يضيف كل شخص قبل الصداقة في قائمة الاصدقاء وتكون له قائمة بالاشخاص الذين طلبو صداقته وطلب صداقتهم ويستطيع الضغط على اي شخص موجود ضمن Listbox1 منهم وارسال رساله اليه بشكل التالي
عند تنفيذ البرنامج وقدوم طلبات شاهد نافذة البرنامج
حمل المثال
هذا البرنامج نستطيع تطبيقه على Windows Mobile حيث نكون شبكة من مجموعة موبايلات مرتبطة براوتر مكونة شبكة وأي فأيWiFi و كل شخص يدخل الشبكة يرسل رسالة للجميع يسأل عن المتواجدين وكل شخص موجود يجاوبه ويضيفه في قائمته. ويستطيعون محادثة بعضهم وتبادل المعلومات بدون انترنت أو خسارة في الرصيد.أي لتنفيذ هذا البرنامج في ارض الواقع نشتري راوتر ونشغله ونجعل الأجهزة المحمولة تتصل به.
حمل المثال من هنا
لا يستطيع اي شخص معرفة عناوين بقية الاشخاص الذين يملكون برنامج المحادثة ليتحادث مع من يحب بطريقة اعتيادية لذالك. لكي يتمكن الشخص ان يتحدث مع من يحب داخل الشبكة نكون server index كل شخص يشغل برنامج المحادثة يسجل اسمه وعنوان عند server index ويعطيه اسماء وعنوانين بقية الاشخاص ضمن الشبكة حتى يستطيع محادثتهم محادثة شخصية عبر عناوينهم..ففي بدية الامر يرسل كل شخص يدخل الشبكة رسالة Broadcast الى الجميع يسئل عن الخادم فيستلم الجميع الرسالة فقط الخادم يجاوب على الرسالة ويعطيه ويعطيه اسماء وعنوانين بقية الاشخاص ضمن الشبكة....................
وهناك طريقة اخرى بدون server index يرسل الشخص رسالة Broadcast يستلمها كل المتواجدين على الشبكة واي شخص يستلم الرسالة يستطيع الاجابة عليها او هملها اذا اجاب عليها يرسل اسمه وعنوانه الى الشخص الذي عمل Broadcast وبذالك يكول لديه سجل باسماء وعناوين لكل المتواجدين داخل الشبكة
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXNaA1AjlJVC2zUBXCRaEJ759sI-Y7ZhB3Soy7JIoBQC8ZGs_Xn05_0Vr64T7-gtzn68CnxAZEFw_NKuMq1oqftC0-OmpcZEfxI2SG4Ro9MtCazNkz3lLbs7QR9TxsD_mPyccLRO2Ha8w/s640/imagnetwork22.png)
طريقة server index اقل حمل على الشبكة من هذه الطريقة لان server index وحده يجيب على الرسالة اما الطريقة الثانية جميع المتواجدين يجيبون على الرسالة مما يؤدي الى حمل على الشبكة وسنقوم ببرمجة الطريقتين
لنبدء بطريقة الثانية بدون server index هنا كل شخص هوا خادم وعميل يرسل ويستقبل الرسائل بداية نكون فورم بشكل التالي
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSC1xhMJoh7pjg_wqzxiYygnqJuXHyTQXK1HV_rGFQS1X7iENdKDGNv0HByCOHGy-AwKOUaZ2uw5Wtx_jcLx59fJEdGU7LamUJBlOIjFJ6SzbfL9vpDNEYxLHVO7IOSWiE3Td75M5g52c/s400/chatbothside.png)
نص اسم الشخص اسمه myname ونص الرسالة المرسلة اسمه send_m ونص الرسائل المستلمه اسمه recived_m وزر البحث اسمه search_Button1 وزر الراسل اسمه send_buttonلنبدء بطريقة الثانية بدون server index هنا كل شخص هوا خادم وعميل يرسل ويستقبل الرسائل بداية نكون فورم بشكل التالي
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSC1xhMJoh7pjg_wqzxiYygnqJuXHyTQXK1HV_rGFQS1X7iENdKDGNv0HByCOHGy-AwKOUaZ2uw5Wtx_jcLx59fJEdGU7LamUJBlOIjFJ6SzbfL9vpDNEYxLHVO7IOSWiE3Td75M5g52c/s400/chatbothside.png)
ثم نكون دالة لارسال رسالة الى كل المتواجدين داخل الشبكة تحوي اسم الشخص وعنوانه ورمز يدل على انها عملية طلب تعريف او طلب صداقة وهنا نستخدم الرمز $ ونحن مخيرين برموز. حتى المستلم يعرف ما نوع الرسالة هل هي طلب تعريف او تاكيد او بيانات اعتيادية استخدمنا هذا الرمز
وهذه دالة ارسال هذه الرسالة للجميع
VB.net Code
Sub send_Data_Broadcast(ByVal the_message As String)
Try
Dim udpClient As New UdpClient(IPAddress.Broadcast.ToString,9001)
udpClient.Send(the_message, the_message.Length)
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
الرسالة سنرسلها بشكل التالي(عنوانه =&&= اسم الشخص$) واستخدمنا =&&= حتى المستلم عندما يقرء بداية الرسالة ويعرف انها تبدء ب$ يعرف انها طلب من شخص ما لأضافته داخل قائمة الاصدقاء يستطيع ان يعرف اسم الشخص وعنوانه من خلال فصل الرسالة بدالة التالية
split(message,” =&&=”)
نستدعي الدالة لكي نرسل رسالة للجميع بشكل التاليكود
send_Data_Broadcast("$" & myname.Text & "=&&=" & GetIPAddress())
و GetIPAddress هي دالة كوناها في بداية الفصل لأيجاد عنوان الشخص ضمن الشبكة
عندما يستلم الاشخاص الرسالة فاذا قبولو الاضافة يرسلون اسمائهم وعناوينهم الى الشخص السائل ويضافون في قائمة الاصدقاء للطرفين واذا لم يقبلو الاضافة لا يجاوبين السائل شاهد الشكل
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXNaA1AjlJVC2zUBXCRaEJ759sI-Y7ZhB3Soy7JIoBQC8ZGs_Xn05_0Vr64T7-gtzn68CnxAZEFw_NKuMq1oqftC0-OmpcZEfxI2SG4Ro9MtCazNkz3lLbs7QR9TxsD_mPyccLRO2Ha8w/s640/imagnetwork22.png)
كود التنصت لكل شخص
Dim udpClient As New UdpClient(9001)
Sub REcivedData()
While True
Dim RemoteIpEndPoint As New IPEndPoint(IPAddress.Any, 0)
Dim receiveBytes As Byte()
receiveBytes = udpClient.Receive(RemoteIpEndPoint)
Dim returnData As String = Encoding.ASCII.GetString(receiveBytes, 0, receiveBytes.Length)
' recived asked to add in his list chat from some one
If returnData(0) = "$" Then
returnData = Mid(returnData, 2, Len(returnData) - 1)
Dim splitip_name() As String = Split(returnData, "=&&=")
If MsgBox(splitip_name(0) & vbNewLine & "--> is ask to add you in his list chat to chating with you ", MsgBoxStyle.Information + MsgBoxStyle.OkCancel, "offer chat") = MsgBoxResult.Ok Then
' if you accept his ask send message to him contain your name and ip
send_Data_to_one(splitip_name(1), "%" & myname.Text & "=&&=" & GetIPAddress())
ListBox1.Items.Add(" you accept Asked=" & returnData)
End If
'some one accept my visit
ElseIf returnData(0) = "%" Then
returnData = Mid(returnData, 2, Len(returnData) - 1)
ListBox1.Items.Add("visit accept=" & returnData)
' other recived data place in input data chat it certain come from identiy user
Else
recived_m.Text = recived_m.Text & vbNewLine & returnData
End If
End While
End Sub
نلاحظ انه اذا قبلو الصداقة يضاف اسم الشخص السائل وعنوانه الى قائمة الاصدقاء ويرسل له رسالة تحوي اسم الشخص الحالي وعنوانه مسبوق بعلامة % بشكل التالي (عنوانه =&&= اسم الشخص%) دال على انها رسالة تاكيد صداقة فعندما يستلم الشخص الذي ارسل طلب الصداقة هذه الرسالة يضيف كل شخص قبل الصداقة في قائمة الاصدقاء وتكون له قائمة بالاشخاص الذين طلبو صداقته وطلب صداقتهم ويستطيع الضغط على اي شخص موجود ضمن Listbox1 منهم وارسال رساله اليه بشكل التالي
Try
Dim splitip_name() As String = Split(ListBox1.SelectedItem, "=&&=")
send_Data_to_one(splitip_name(1), myname.Text & " : " & send_m.Text)
Catch ex As Exception
End Try
send_Data_to_one هي دالة لارسال رسالة الى شخص محدد لارسال بيانات له وحده Sub send_Data_to_one(ByVal ip_adderss As String, ByVal the_message As String)
Try
Dim udpClientto_one As New UdpClient(ip_adderss, 9001)
Dim sendBytes As Byte()
sendBytes = Encoding.ASCII.GetBytes(the_message)
udpClientto_one.Send(sendBytes, sendBytes.Length)
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
عند تنفيذ البرنامج وقدوم طلبات شاهد نافذة البرنامج
حمل المثال
هذا البرنامج نستطيع تطبيقه على Windows Mobile حيث نكون شبكة من مجموعة موبايلات مرتبطة براوتر مكونة شبكة وأي فأيWiFi و كل شخص يدخل الشبكة يرسل رسالة للجميع يسأل عن المتواجدين وكل شخص موجود يجاوبه ويضيفه في قائمته. ويستطيعون محادثة بعضهم وتبادل المعلومات بدون انترنت أو خسارة في الرصيد.أي لتنفيذ هذا البرنامج في ارض الواقع نشتري راوتر ونشغله ونجعل الأجهزة المحمولة تتصل به.
نفتح مشروع SmartDevice جديد ونكون فورم كما في الشكل للمستخدمين
حمل المثال من هنا
ليست هناك تعليقات:
إرسال تعليق