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

بناء غرف المحادثة

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

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

لنصمم مشروع جديد كما في الشكل

post-243277-053956100 1332913001_thumb.p

كما نلاحظ كونا قائمة بأسماء الغرف الموجودة داخل 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

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

VB.NET CODE

Imports System.Net
Imports System.Net.Sockets
Imports System.Text
Imports System.IO
Imports System.Threading
Public Class send_message
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
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


Private Sub send_button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles send_button.Click
sendTOGrop(tbMulticastGroup.Text, Integer.Parse(tbPort.Text), Encoding.UTF8.GetBytes(tbname.Text & ":" & tbMessagesend.Text))
End Sub

Private Sub jionbt_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles jionbt.Click


myth1 = New Thread(New System.Threading.ThreadStart(AddressOf JionToGropMulticast))
myth1.Start()
jionbt.Enabled = False
End Sub

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

Private Sub send_message_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
If jionbt.Enabled = False Then
Try
'Dim group As IPAddress = IPAddress.Parse(tbMulticastGroup.Text)
' client.DropMulticastGroup(group, 255)
client.Close()
myth1.Abort()
Catch ex As Exception
MsgBox(ex.Message)
End Try
End If
End Sub
End Class

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

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

لنصمم مشروع Smart Device جديد كما في الشكل

post-243277-038101500 1332913014_thumb.p

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

نريد عند الضغط على اسم مجموعة يعرف عنوانها داخل tbMulticastGroup لذالك تخزن عناوين كل غرفة وعندما نختار غرفة يظهر عنوانها وداخل حدث ListBox1_SelectedIndexChanged

والكود نفس البرنامج السابق

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

قائمة كتبي

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

01332574371.jpg

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

01332574646.png

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

01332574343.jpg

chat Room -UDP-Sockets -Multicast.rar

chat room mbile.rar

المرفقات
chatroomimage.pngmbile chat.png
1

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

حسين الربيعي

 

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

 

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

 

مدونتي

http://hussienahmmed.blogspot.com/

 

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

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

#2

توضيح لدوال الانضمام والخروج من المجموعات خطوة خطوة

post-243277-039829600 1332915233_thumb.p

دالة للأرسال الى مجموعة محددة sendTOGrop: للأرسال لأي مجموعة يجب ان نكون اعضاء فيها لذالك قبل الأرسال نضيف عضويتنا الى المجموعة . وهذه الدالة التي كوناها تأخذ تلاث برامترات الأول عنوان المجموعة والثاني بورت التنصت للمجموعة والثالث البيانات المرسلة بعد تحويلها الى بايت

VB.NET CODE

1.	Public Sub sendTOGrop(ByVal mcastGroup As String, ByVal port As Integer, ByVal message As Byte())
2.	Dim ip As IPAddress = IPAddress.Parse(mcastGroup)
3.	Dim s As Socket = New Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)
4.	s.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, New MulticastOption(ip))
5.	s.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastTimeToLive, 255)
6.	Dim ipep As IPEndPoint = New IPEndPoint(IPAddress.Parse(mcastGroup), port)
7.	s.Connect(ipep)
8.	s.Send(message, message.Length, SocketFlags.None)
9.	s.Close()
10.	End Sub

توضيح الخطوات

1. خطوة رقم 2 كونا عنوان المجموعة وخطوة رقم 3 كونا سوكيت للأرسال على UDP

2. خطوة رقم 4 اضفنا عنوان المجموعة الى قائمة العناوين Address Lsit

3. خطوة رقم 5 حددنا فترة حياة Packet

4. خطوة رقم 7 اتصلنا بالمجموعة

5. خطوة رقم 8ارسلنا البيانات الى كل اعضاء المجموعة

6. خطوة رقم 9 اغلقنا الأتصال

لو اردنا ارسال رسالة الى مجموعة A كما في الشكل السابق يكون الكود

VB.NET CODE

sendTOGrop ("224.5.4.6", 9001, Encoding.ASCII.getbytes(“hi hussien”))

عند الأرسال للمجموعة A حددنا بورت الأرسال هو 9001 لأن هذه المجموعة تتصنت على هذا البورت

توضيح دالة jionToMulticast

مثال: في الشكل السابق لو اراد اعضاء المجموعة A الانضمام الى عنوانهم 224.0.50.0 لكي يستلمو البيانات من الشخص المرسل الى المجموعة وعرضها بشكل نص يكون الكود التنصت كتالي

VB.NET CODE

1.	Sub  jionToMulticast()
2.	Dim client As UdpClient = New UdpClient(5000)
3.	Dim group As IPAddress = IPAddress.Parse("224.5.4.6")
4.	client.JoinMulticastGroup(group, 255)
5.	Dim remoteEP As IPEndPoint = New IPEndPoint(group, 5000)
6.	Do
7.	Dim ep As IPEndPoint = Nothing
8.	Dim buffer() As Byte = client.Receive(ep)
9.	Dim message As String = System.Text.Encoding.ASCII.GetString(buffer)
10.	Msgbox( message )
11.	Loop
12.	End Sub

توضيح الخطوات

1. خطوة رقم 2 كونا كائن للتنصت على بورت المجموعة وهو 5000

2. خطوة رقم 4 انضمينا للمجموعة ِA التي عنوانها 224.5.4.6 لكي نستلم أي بيانات مرسلة لهذه المجموعة

3. خطوة رقم 7 حددنا IPEndPoint للحاسبة التي سنستلم منها

4. خطوة رقم 8 استلمنا البيانات من أي شخص ضمن هذه المجموعة بشكل بايت

5. خطوة رقم 9 عرضنا ما تم استلامه من بيانات بشكل رسالة نص

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

قائمة كتبي

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

01332574371.jpg

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

01332574646.png

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

01332574343.jpg
المرفقات
welcomemulticats.png

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

حسين الربيعي

 

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

 

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

 

مدونتي

http://hussienahmmed.blogspot.com/

 

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

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

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

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

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

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

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