الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

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

بدأه حسين احمد طالب في 14 مارس 2012 · 6 رد · 4,682 مشاهدة · في برمجة الشبكات والتطبيقات الموزعة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

تطبيق :

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

وهناك طريقة اخرى بدون server index يرسل الشخص رسالة Broadcast يستلمها كل المتواجدين على الشبكة واي شخص يستلم الرسالة يستطيع الاجابة عليها او هملها اذا اجاب عليها يرسل اسمه وعنوانه الى الشخص الذي عمل Broadcast وبذالك يكول لديه سجل باسماء وعناوين لكل المتواجدين داخل الشبكة

post-243277-011728800 1331717305_thumb.p

طريقة server index اقل حمل على الشبكة من هذه الطريقة لان server index وحده يجيب على الرسالة اما الطريقة الثانية جميع المتواجدين يجيبون على الرسالة مما يؤدي الى حمل على الشبكة وسنقوم ببرمجة الطريقتين

لنبدء بطريقة الثانية بدون server index هنا كل شخص هوا خادم وعميل يرسل ويستقبل الرسائل بداية نكون فورم بشكل التالي

post-243277-020691200 1331717233_thumb.p

نص اسم الشخص اسمه myname ونص الرسالة المرسلة اسمه send_m ونص الرسائل المستلمه اسمه recived_m وزر البحث اسمه search_Button1 وزر الراسل اسمه send_button

ثم نكون دالة لارسال رسالة الى كل المتواجدين داخل الشبكة تحوي اسم الشخص وعنوانه ورمز يدل على انها عملية طلب تعريف او طلب صداقة وهنا نستخدم الرمز $ ونحن مخيرين برموز. حتى المستلم يعرف ما نوع الرسالة هل هي طلب تعريف او تاكيد او بيانات اعتيادية استخدمنا هذا الرمز

post-243277-073032600 1331717055_thumb.p

وهذه دالة ارسال هذه الرسالة للجميع

Sub send_Data_Broadcast(ByVal inf_nameANDip As String)
Try
Dim ip_address As String = IPAddress.Broadcast.ToString
Dim udpClientBroadcast As New UdpClient(ip_address, 9001)
Dim sendBytes As Byte()
sendBytes = Encoding.ASCII.GetBytes(inf_nameANDip)
udpClientBroadcast.Send(sendBytes, sendBytes.Length)
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub

الرسالة سنرسلها بشكل التالي(عنوانه =&&= اسم الشخص$) واستخدمنا =&&= حتى المستلم عندما يقرء بداية الرسالة ويعرف انها تبدء ب$ يعرف انها طلب من شخص ما لأضافته داخل قائمة الاصدقاء يستطيع ان يعرف اسم الشخص وعنوانه من خلال فصل الرسالة بدالة التالية

 ” =&&=”) split(message,

نستدعي الدالة لكي نرسل رسالة للجميع بشكل التالي

كود

send_Data_Broadcast("$" & myname.Text & "=&&=" & GetIPAddress())

و GetIPAddress هي دالة كوناها في بداية الفصل لأيجاد عنوان الشخص ضمن الشبكة

عندما يستلم الاشخاص الرسالة فاذا قبولو الاضافة يرسلون اسمائهم وعناوينهم الى الشخص السائل ويضافون في قائمة الاصدقاء للطرفين واذا لم يقبلو الاضافة لا يجاوبين السائل شاهد الشكل

post-243277-011728800 1331717305_thumb.p

كود التنصت لكل شخص

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

كود البرنامج كامل

Imports System.Net
Imports System.Net.Sockets
Imports System.Text
Imports System.IO
Imports System.Threading
Public Class send_message
Dim myth As Thread
Dim udpClient As New UdpClient(9001)
Public Function GetIPAddress() As String
Dim oAddr As System.Net.IPAddress
Dim sAddr As String
With System.Net.Dns.GetHostByName(System.Net.Dns.GetHostName())
oAddr = New System.Net.IPAddress(.AddressList(0).Address)
sAddr = oAddr.ToString
End With
GetIPAddress = sAddr
End Function
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
Sub send_Data_Broadcast(ByVal inf_nameANDip As String)
Try
Dim ip_address As String = IPAddress.Broadcast.ToString
Dim udpClientBroadcast As New UdpClient(ip_address, 9001)
Dim sendBytes As Byte()
sendBytes = Encoding.ASCII.GetBytes(inf_nameANDip)
udpClientBroadcast.Send(sendBytes, sendBytes.Length)
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
Private Sub send_button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles send_button.Click
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
End SubSub 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
Private Sub send_message_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
Try
udpClient.Close()
myth.Abort()
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub

Private Sub send_message_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
myth = New Thread(New System.Threading.ThreadStart(AddressOf REcivedData))
myth.Start()
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles search_Button1.Click
send_Data_Broadcast("$" & myname.Text & "=&&=" & GetIPAddress())
End Sub
Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
Try
Dim splitip_name() As String = Split(ListBox1.SelectedItem, "=&&=")
Dim splitip_name1() As String = Split(splitip_name(0), "=")
GroupBox2.Text = "typing message sent to(" & splitip_name1(1) & ")"
Catch ex As Exception
End Try
End Sub
Private Sub recived_m_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles recived_m.TextChanged
' fro put Focus on last coloumns in arrive text
Try
recived_m.Focus()
recived_m.Select(Len(recived_m.Text) - 1, 0)
recived_m.Focus()
Catch ex As Exception
End Try
End Sub
End Class

عند تنفيذ البرنامج وقدوم طلبات شاهد نافذة البرنامج

post-243277-044930200 1331717191_thumb.p

حمل المثال من المرفقات

مدونتي

http://hussienahmmed.blogspot.com/

distributed system network.rar

المرفقات
شسليت7.pngarkedchat.pngchatbothside.pngimagnetwork22.png
1

------------------

حسين الربيعي

 

مهندس برامجيات من العراق

 

ادرس  في  RIT  في الولايات المتحدة

 

مدونتي

http://hussienahmmed.blogspot.com/

 

قناة اليوتيوب الخاصة بلدورات

https://www.youtube.com/user/alxs1aa

#2

تطبيق :مجموعة موبايلات (أجهزة محمولة) موزعة على شبكة كيف نكون برنامج محادثة خاصة بين الأعضاء بدون خادم..؟

نفس الفكرة السابقة ونفس الكود السابق الذي لا تعتمد على index server لا يوجد أي تغير نستطيع تطبيقه على Windows Mobile حيث نكون شبكة من مجموعة موبايلات مرتبطة براوتر مكونة شبكة وأي فأيWiFi أو كل شخص يدخل الشبكة يرسل رسالة للجميع يسأل عن المتواجدين وكل شخص موجود يجاوبه ويضيفه في قائمته. ويستطيعون محادثة بعضهم وتبادل المعلومات بدون انترنت أو خسارة في الرصيد.أي لتنفيذ هذا البرنامج في ارض الواقع نشتري راوتر ونشغله ونجعل الأجهزة المحمولة تتصل به.

post-243277-030669300 1332227043_thumb.p

تكوين مشروع جديد

post-243277-061426200 1332227065_thumb.p

المشروع بالمرفقات

mobile chat.rar

المرفقات
digarm.pngimage.png

------------------

حسين الربيعي

 

مهندس برامجيات من العراق

 

ادرس  في  RIT  في الولايات المتحدة

 

مدونتي

http://hussienahmmed.blogspot.com/

 

قناة اليوتيوب الخاصة بلدورات

https://www.youtube.com/user/alxs1aa

#3

قمت بتصميم برنامج المحادثة وكانت الفكرة مشابهة تماما الى للفكرة الاولي وكان البرنامج عبارة عن مشروع تخرج من الجامعة وكان البرنامج يعمل بصورة صحيحة

وكل هذا كان على شبكة داخلية

ولكن عند تطبيقه على الانترنت واجهتنا المشكلة التالية :

اولا: جرئية السيرفر

عند دخوا ل كلاين الى برنامج المحادثة يسجل نفسه فى فى السيرفر وياخذ كافة المعلومات حول المتصليين به , ولكن عتدما يتصل تظهر رسالة خطأ بان الابي غر معروف , هذا الجزيئة تحتاج الى سيرفر يكون علية public IP بمعنى اخر شراء IP يكون على السيرفر من اي شركة اتصالات بحيث يمكن الوصول من الكلاين الى السيرفر.

ثانيا : جرئية الكلاين

عند ارسال رسالة من كلاين1 الى كلاين 2 تحصل خطا فى عميل الارسال ,بان الابي غير معروف , مع انه كل كلاين يعرف الابي للكلاين الاخر , بمعنى اوضح ان كل كلاين يحتاج الى public IP حتى يمكنه الارسال وهذة عملية مكلفة وغير معقولة ,لذا تم قمت بتصميم Web SERVICE على السيرفر معاملتها

اسم الكلاين المستقبل , الرسالة المرسلة و اسم الكلاين المرسل

ويقوم الكلاين 1 المرسل بحفظ الرسالة المرسلة عن Web SERVICE على السيرفر

وكل فترة يتصل الكلاين 2 المستقبل على السيرقر عن طريق Web SERVICE ايضا ,ياخذ الرسالة ويظهر على شاشة الكلاين .

على فكرة

احيانا يكون للمرسل ان يستعرض كافة الرسائل المرسلة وهذة الامكانية موجودة فى Google, yahoo

وهذا السيناريو البسيط الخاص ببرمجة المحادثة

والله اعلم

وشكر

Sameeralwosaby@yahoo.com

تم تعديل هذه المشاركة بواسطة alwosaby في 29 مارس 2012 في 10:19

#4

وما دخل ما تقوله بالمقالة الموجودة هنا ..؟؟؟؟؟؟؟؟؟

يبدو انك لم تقرء عملية Broadcast الموجودة في البرنامج الموجود في المقال

ونعلم ان Broadcast لا ينبث على اكثر من راوتر يعني التطبيق ومن بدايته يبين لك ان البرنامج هذا مطبق على شبكة داخلية بين مجموعة من الحاسبات وليس عبر انترنت اوعدة راوترات

اتمنى ان تكون فهمت المقال جيدا

تحياتي

------------------------------------------------

قائمة كتبي

خطوة بخطوة نحو قاعدة بيانات ترضي العميل بالفجوال بيسك دوت نت

01332574371.jpg

خطوة بخطوة لتعلم لغة سي وسي بلاس

01332574646.png

بروتوكولات الشبكات TCP,UDP,IP وبناء التطبيقات بالبروتوكول الملائم فيجوال بيسك دوت نت

01332574343.jpg

------------------

حسين الربيعي

 

مهندس برامجيات من العراق

 

ادرس  في  RIT  في الولايات المتحدة

 

مدونتي

http://hussienahmmed.blogspot.com/

 

قناة اليوتيوب الخاصة بلدورات

https://www.youtube.com/user/alxs1aa

#5

اولا موضوعك اكثر من رائع

وثانيا موضوعى لم يكن رد على موضوعك او قل فهم منى ولكنه من باب الفائدة للجميع لا اقل او اكثر وخصوصا انا لي تجربه فى هذا الموضوع

#6

السلام عليكم 

استاذي العزيز

لدي طلب .. حاليا اقوم بتصميم برنامج محادثة او ارسال رسائل للأجهزة على شبكة محلية ... وأعجبتني الطريقة التي تعاملت معها ..

 

سؤالي: أذا لدي مجموعه أجهزة مثلا 10 أجهزة وأردت بأن أرسل رسالة لإجهزة معينة مثلا 1 و 4 و 5 و 6 و7 .. دفعه وحده ..بدزن ما توصل للأجهزة الثانية 

 

 

ارجو أفادتي بالحل المناسب أو النقاش في الموضوع ... 

وشكرا

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…