الأربعاء، 28 مارس 2012

بناء غرف للدردشة للأجهزة المحمولة والحواسيب

كيف تصمم غرف المحادثة .عندما نصمم غرف المحادثة كل غرفة من غرف المحادثة نسميها بأسم معين ونعطيها عنوان معين ضمن نطاق Class D للعنونة كل شخص يريد ان يدخل غرفة يعمل انضمام لعنوان هذه الغرفة حتى يتحدث مع كل موجود داخل الغرفة.اذن في برمجة غرف المحادثة كل شخص يدخل غرفة محادثة  يعمل  انضمام الى المجموعة الموجودة  في الغرفة على عنوان الغرفة حتى يرسل ويستلم من المجموعة وهذا ما يحدث بظبط في غرف المحادثة واكيد يتم تحديد لكل غرفة عنوان معين من قبل الشركة الخاصة ببرنامج المحادثة .وبذالك يستطيع محادثة كل المتواجدين داخل الغرفة
لنصمم مشروع جديد كما في الشكل

كما نلاحظ كونا قائمة بأسماء الغرف الموجودة داخل  ListBox1 لعرض الغرف  في داخلها وكل شخص جديد يدخل يختار غرفة لكي ينضم اليها وندرج Button انضمام لمجموعة نسميها jionbt وندرج Button للأرسال نسميها send_button. وندرج اداة نص textbox  لعنوان الغرفة نسميها tbMulticastGroup وندرج اداة نص لمنفذ الغرفة نسميها tbPort وندرج اداة نص لأسم الشخص المختار داخل الغرفة نسميها tbname وندرج اداة نص لأستلام المحادثة من بقية اعضاء الغرفة نسميها tbMessage وندرج اداة نص لكتابة النصوص وارسالها tbMessagesend  
نريد عند الضغط على اسم مجموعة يعرف عنوانها داخل tbMulticastGroup لذالك تخزن عناوين كل غرفة وعندما نختار غرفة يظهر عنوانها وداخل حدث  ListBox1_SelectedIndexChanged نكتب الكود التالي

VB.NET CODE
Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
        Try
            If jionbt.Enabled = True Then
                Select Case Trim(ListBox1.SelectedItem)
                    Case "كروب الشياب"
                        tbMulticastGroup.Text = "224.5.4.6 "
                    Case "كروب الشباب"
                        tbMulticastGroup.Text = "224.5.4.8"
                    Case "كروب المقاعدين"
                        tbMulticastGroup.Text = "224.5.4.9"
                    Case "كروب ورد"
                        tbMulticastGroup.Text = "224.5.4.10"
                    Case "كروب طلاب"
                        tbMulticastGroup.Text = "224.5.4.11 "
                    Case "كروب مبرمجين"
                        tbMulticastGroup.Text = " 224.5.4.12"
                End Select
                ljionto.Text = ListBox1.SelectedItem
            End If
        Catch ex As Exception
        End Try
   
End Sub

الأن بعد ان حصلنا على عنوان الغرفة ومنفذها نريد ان ننضم اليها داخل Button انضمام لمجموعة  jionbt  نعمل تشغيل لدالة التنصت والأنضمام  الى مجموعة   نكتب الكود التالي


VB.NET CODE
myth1 = New Thread(New System.Threading.ThreadStart(AddressOf JionToGropMulticast))
myth1.Start()
jionbt.Enabled = False

JionToGropMulticast هي الدالة التي ننضم بها الى المجموعة ويكون كودها

VB.NET CODE
Dim client As UdpClient
Dim myth1 As Thread
Sub JionToGropMulticast()
Dim port As Integer = Val(tbPort.Text)
client = New UdpClient(port)
Dim group As IPAddress = IPAddress.Parse(tbMulticastGroup.Text)
client.JoinMulticastGroup(group, 255)
Dim remoteEP As IPEndPoint = New IPEndPoint(group, port)
Do
Dim ep As IPEndPoint = Nothing
Dim buffer() As Byte = client.Receive(ep)
Dim message As String = System.Text.Encoding.UTF8.GetString(buffer)
Me.tbMessage.Text += message + vbCrLf
Loop
End Sub
بعد ان انضمينا الى المجموعة في Button للأرسال الى المجموعة  send_button  نستدعي دالة الأرسال لمجموعة sendTOGrop  ونرسل لها عنوان المجموعة ورقم بورت التنصت للمجموعة والرسالة

VB.NET CODE

sendTOGrop(tbMulticastGroup.Text, Integer.Parse(tbPort.Text), Encoding.UTF8.GetBytes(tbname.Text & ":" & tbMessagesend.Text))
دالة sendTOGrop يكون كودها


 
VB.NET CODE

 
 Public Sub sendTOGrop(ByVal mcastGroup As String, ByVal port As Integer, ByVal messageByte As Byte())
Dim ip As IPAddress = IPAddress.Parse(mcastGroup)
Dim s As Socket = New Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)
s.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, New MulticastOption(ip))
s.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastTimeToLive, 255)
Dim ipep As IPEndPoint = New IPEndPoint(IPAddress.Parse(mcastGroup), port)
s.Connect(ipep)
s.Send(messageByte, messageByte.Length, SocketFlags.None)
s.Close()
End Sub


 
برنامج بناء غرف محادثة للأجهزة المحمولة
كيف تصمم غرف المحادثة للأجهزة المحمولة.نفس الفكرة السابقة .عندما نصمم غرف المحادثة كل غرفة من غرف المحادثة نسميها بأسم معين ونعطيها عنوان معين ضمن نطاق Class D للعنونة كل شخص يريد ان يدخل غرفة يعمل انضمام لعنوان هذه الغرفة حتى يتحدث مع كل موجود داخل الغرفة.اذن في برمجة غرف المحادثة كل شخص يدخل غرفة محادثة  يعمل  انضمام الى المجموعة الموجودة  في الغرفة على عنوان الغرفة حتى يرسل ويستلم من المجموعة وهذا ما يحدث بظبط في غرف المحادثة واكيد يتم تحديد لكل غرفة عنوان معين من قبل الشركة الخاصة ببرنامج المحادثة .وبذالك يستطيع محادثة كل المتواجدين داخل الغرفة
لنصمم مشروع Smart Device جديد كما في الشكل
كما نلاحظ كونا قائمة بأسماء الغرف الموجودة داخل  ListBox1 لعرض الغرف  في داخلها وكل شخص جديد يدخل يختار غرفة لكي ينضم اليها وندرج Button انضمام لمجموعة نسميها jionbt وندرج Button للأرسال نسميها send_button. وندرج اداة نص textbox  لعنوان الغرفة نسميها tbMulticastGroup وندرج اداة نص لمنفذ الغرفة نسميها tbPort وندرج اداة نص لأسم الشخص المختار داخل الغرفة نسميها tbname وندرج اداة نص لأستلام المحادثة من بقية اعضاء الغرفة نسميها tbMessage وندرج اداة نص لكتابة النصوص وارسالها tbMessagesend  
نريد عند الضغط على اسم مجموعة يعرف عنوانها داخل tbMulticastGroup لذالك تخزن عناوين كل غرفة وعندما نختار غرفة يظهر عنوانها وداخل حدث  ListBox1_SelectedIndexChanged
والكود نفس البرنامج السابق


تحميل المثال

الأحد، 18 مارس 2012

كتاب بروتوكولات الشبكات TCP,UDP,IP وبناء التطبيقات بالبروتوكول الملائم VB.NET




عن الكتاب
             
يتناول هذا الكتاب  برمجة تطبيقات الشبكات ببرتوكولات  OSI Model التي تضم كل من  TCP,UDP,IP بلغة فيجوال بيسك دوت نت Visual Basic .net  وكيفية تكوين تطبيقات  بالبرتوكول الملائم حتى يكون التطبيق ذو متانة عالية وملائم لما نريد أن يقوم به من عمليات  وحتى تكون مقدار خسارة البيانات عبر الشبكة قليل جدا والتأخير   بتناقل البيانات عبر الشبكة قليل   جدا  من خلال اختيار البرتوكول الملائم لكل تطبيق وفي هذا الكتاب تجد انه يشرح لك كل بروتوكول وما هي فوائده وما هي مضاره وكل تطبيق أي بروتوكول هو أكثر ملائمة له.ويربط بين واقع نضري وعملي.  ويبدأ معاك من المستوى المبتدئ ويتنهي بك بما هو خير لله ولرسوله وللمسلمين .

المحتويات


الفصل الأول : مدخل إلى الشبكات
§       11.  -البروتوكولات وملائمتها مع التطبيق الذي نبنيه
§       2.1- مكاتب التي تخص الشبكات في بيئة الدوت نت
§       -1.3 العناوين (IPAddress)
§       IPEndPoint -1.4
§       1.5- المنفذ Port Number
§       NetworkStream -1.6
§       -1.7قراءة وكتابة البيانات على NetworkStream عبر دوال ضمن مكتبة System.IO
§       Task Parallelism -1.8
§       1.8.1-  Introduction to Parallel Tasks
§       Threading -1.8.2
§       9.1- تحويل البيانات  إلى بايت والعكس
الفصل الثاني:  بروتوكول TCP  (TCPCilent,TCPListener)
§       2.1- بروتوكول TCP
§       2.2- إرسال البيانات بكلاس TcpClient  
§       2.3- استقبال البيانات بكلاس  TcpListener
§       2.4- تطبيقات برمجية
§       -2.4.1تطبيق : برنامج محادثة بسيط  .؟
§       -2.4.2تطبيق: برنامج مراقبة شاشة الكومبيوتر عن بعد. ؟
§       -2.4.3 تطبيق :  :مجموعة حاسبات موزعة على شبكة كيف نكون برنامج محادثة خاصة بين الأعضاء وعمل بيئة تفاعلية بين بينهم وتناقل بيانات بين الاعضاء..؟
§       2.4.4 تطبيق :  :مجموعة موبايلات (أجهزة محمولة) موزعة على شبكة كيف نكون برنامج محادثة خاصة بين الأعضاء وعمل بيئة تفاعلية بين بينهم وتناقل بيانات بين الأعضاء..؟
§       -2.4.5تطبيق:إرسال نصوص  و إرسال صور عن بعد. ؟
الفصل الثالث: بروتوكول UDP  (UDPClient)
§     3.1- بروتوكول UDP
§       3.2- إرسال  واستقبال البيانات بكلاس UDPClient   
§       3.2.1-إرسال ألبيانات بكلاس UDPClient
§       3.2.2- استقبال البيانات بكلاس  UDPClient
§       3.3- تطبيقات برمجية 
§       -3.3.1 تطبيق : برنامج محادثة بسيط  .؟
§       -3.3.2تطبيق: برنامج مراقبة شاشة الكومبيوتر عن بعد. ؟
§       -3.3.3تطبيق: مشاهدة الشخص عبر الكاميرة عن بعد
§       3.4- إرسال البيانات   Broadcastالى الجميع
§       3.5- تطبيقات برمجية 
§       -3.5.1 تطبيق : تكوين برنامج لمؤسسة ما فعند دخول أي شخص إلى المؤسسة واتصاله بشبكة يستقبل رسائل ترحيبية من المركز
§       -3.5.2 تطبيق :  :مجموعة حاسبات موزعة على شبكة كيف نكون برنامج محادثة خاصة بين الأعضاء وعمل بيئة تفاعلية بين بينهم وتناقل بيانات بين الأعضاء..
§       - 2.5.3 تطبيق :مجموعة موبايلات (أجهزة محمولة) موزعة على شبكة كيف نكون برنامج محادثة خاصة بين الأعضاء بدون خادم..
الفصل الرابع: بروتوكولات Socket
§       4.1- Sockets   
§       4.2  - استخدام البروتوكول TCP  على Sockets
§       4.2.1- إرسال البيانات عبر  socketsببروتكول TCP
§       4.2.2- استلام البيانات عبر  socketsببروتكول TCP
§       4.2.3- تطبيقات برمجية
o      -4.2.3.1تطبيق : برنامج محادثة بسيط  على شبكة محلية أو شبكة انترنت  .؟
§       4.2.3.2- تطبيق :إرسال ملفات كبيرة الحجم عبر الشبكة
§       4.3  - استخدام البروتوكول UDP  على Sockets
§       4.3.1- إرسال البيانات عبر  socketsببروتكول UDP
§       4.3.1.1- الدالة SendTo :
§       4.3.2 - استلام البيانات عبر  socketsببروتكول UDP
§       4.3.2.1- الدالة ReceiveFrom 
§       4.3.3- تطبيقات برمجية
o      4.3.3.1 -تطبيق : برنامج محادثة بسيط  على شبكة محلية أو شبكة انترنت  .؟
§       4.3.4- إرسال البيانات   Broadcastالى الجميع
§       4.3.5- تطبيقات برمجية
§       4.3.5.1 - إرسال رسالة إلى سيرفر ولسيرفر يبثها لجميع المتصلين ضمن شبكته
§       4.3.6- الانضمام والخروج من المجموعة (DropMulticastGroup, JoinMulticastGroup )
§         4.3.6.1- دالة  JoinMulticastGroup
§       4.3.6.2- دالة DropMulticastGroup
§       4.3.6.3- الدالة SetSocketOption
§       4.3.7- تطبيقات برمجية 
§       4.3.7.1-تطبيق: برنامج عرض شاشة الكومبيوتر الى مجموعة. ؟
§       4.3.7.2- تطبيق: برنامج بناء غرف محادثة
§       4.3.7.3- تطبيق: برنامج بناء غرف محادثة للأجهزة المحمولة
§       4.4-   بروتوكول IP
§       4.4.1-   إرسال البيانات عبر  socketsببروتكول IP
§       4.4.2-    استلام البيانات عبر  socketsببروتكول IP
§       4.4.3-   تطبيقات برمجية
o    -4.4.3.1 تطبيق : برنامج محادثة بسيط  على شبكة محلية أو شبكة انترنت  .؟

تحميل الكتاب او من هنا  او من هنا
تحميل مرفقات الكتاب

الأربعاء، 14 مارس 2012

مجموعة حاسبات موزعة على شبكة كيف نكون برنامج محادثة خاصة بين الاعضاء وعمل بيئة تفاعلية

تطبيق :هذا التطبيق تم بنائه ببروتوكول UDP نضرا لقابلية هذا البروتوكول على البث الجماعي
لا يستطيع اي شخص معرفة عناوين بقية الاشخاص الذين يملكون برنامج المحادثة ليتحادث مع من يحب بطريقة اعتيادية لذالك. لكي يتمكن الشخص ان يتحدث مع من يحب داخل الشبكة نكون server index كل شخص يشغل برنامج المحادثة يسجل اسمه وعنوان عند server index  ويعطيه اسماء وعنوانين بقية الاشخاص ضمن الشبكة حتى يستطيع محادثتهم  محادثة شخصية عبر عناوينهم..ففي بدية الامر يرسل كل شخص يدخل الشبكة رسالة Broadcast الى الجميع يسئل عن  الخادم فيستلم الجميع الرسالة فقط الخادم يجاوب على الرسالة ويعطيه ويعطيه اسماء وعنوانين بقية الاشخاص ضمن الشبكة....................
وهناك طريقة اخرى بدون server index يرسل الشخص  رسالة Broadcast يستلمها كل المتواجدين على الشبكة واي شخص يستلم الرسالة يستطيع الاجابة عليها او هملها اذا اجاب عليها يرسل اسمه وعنوانه الى الشخص الذي عمل Broadcast وبذالك يكول لديه سجل باسماء وعناوين  لكل المتواجدين  داخل الشبكة 

طريقة server index اقل حمل على الشبكة من هذه الطريقة  لان server index وحده يجيب على الرسالة اما الطريقة الثانية جميع المتواجدين يجيبون على الرسالة مما يؤدي الى حمل على الشبكة وسنقوم ببرمجة  الطريقتين
لنبدء بطريقة الثانية بدون server index هنا كل شخص هوا خادم وعميل يرسل ويستقبل الرسائل بداية نكون فورم بشكل التالي
نص اسم الشخص اسمه myname ونص الرسالة المرسلة اسمه   send_m ونص الرسائل المستلمه اسمه recived_m وزر البحث اسمه search_Button1 وزر الراسل اسمه send_button
ثم نكون دالة لارسال  رسالة الى كل المتواجدين داخل الشبكة تحوي اسم الشخص وعنوانه ورمز يدل على انها عملية طلب تعريف او طلب صداقة  وهنا نستخدم الرمز $  ونحن مخيرين برموز. حتى المستلم يعرف ما نوع  الرسالة هل هي طلب تعريف او تاكيد او بيانات اعتيادية استخدمنا هذا الرمز






 وهذه دالة ارسال هذه الرسالة للجميع
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 هي دالة كوناها في بداية الفصل  لأيجاد عنوان الشخص ضمن الشبكة
عندما يستلم  الاشخاص الرسالة فاذا قبولو الاضافة يرسلون  اسمائهم وعناوينهم  الى الشخص السائل ويضافون في قائمة الاصدقاء للطرفين واذا لم يقبلو الاضافة لا يجاوبين السائل شاهد الشكل



كود التنصت لكل شخص
 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    جديد ونكون فورم كما في الشكل للمستخدمين






حمل المثال من هنا