منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

نسخة كاملة : فائدة - كيفية عمل Ping
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
كاتب الموضوع : أبو عابد

السلام عليكم ورحمة الله وبركاته


أمر Ping في الشبكات يستخدم لفحص الاتصال بين الجهاز المحلي و جهاز أخر على الشبكة بواسطة الـ IP الخاص به .

وطريقته هو إرسال كمية من البايتات من الجهاز المرسل إلى المستقبل و يقوم المستقبل بالرد على هذه البايتات (بنفس العدد و الحجم) وهو ما يمسى بـ Replay .
يقوم بعد ذلك الجهاز المرسل بفحص البايتات العائدة من الجهاز المستقبل و يقارنها بالبايتات المرسلة ليظهر بعد ذلك نتيجة الاتصال بين الجهازين عبر إحصائية تمثل عدد المرسل و المفقود و الوقت المستغرق للوصول (عدد القفزات) .

بإمكانك تجربة هذا الأمر عن طريق الدوس .

إبدأ Start
ثم > تشغيل Run
ثم اكتب cmd

ستظهر لك شاشة سوداء ، أكتب فيها Ping ثم عنوان IP لأي جهاز على الشبكة ( لضمان وجود رد أكتب الـ IP التالي 127.0.0.1 وهو عنوان الجهاز نفسه)

بعد الضغط على زر Enter ستظهر لك نتيجة الاختبار .


حسناً ،،،

نستطيع في الدوت نت تنفيذ هذا الأمر كالتالي :

إنشاء كائن pingSender من الفئة Ping


كود :
Dim pingSender As New Ping

الآن نستطيع إرسال بايتات إلى الجهاز المستقبل بواسطة الوظيفة Send التابعة للفئة Ping كالتالي :


كود :
pingSender.Send(strIPAddress, intTimeOut, buffer)
حيث أن الوسائط هي :
1- قيمة نصية String تمثل عنوان الجهاز المشتقبل .
2- قيمة عددية Integer تمثل الوقت الأقصى الذي يمكن فيه انتظار رد المستقبل .
3- مصفوفة من نوع Byte سيحمل حجم البايتات المرسلة للجهاز المستقبل .

ولأجل تحقيق الفائدة من هذا كله يجب علينا قراءة القيم العائدة من هذا الاختبار .

سنحتاج للإعلان عن كائن Reply من الفئة PingReply لأجل أن يستقبل تلك القيم .

وعلى هذا يكون الكود كالتالي :


كود :
Dim Reply As PingReply = pingSender.Send(strIPAddress, intTimeOut, buffer)

الآن يجب أن نختبر الكائن Replay هل نجح في عمله أم لا :


كود :
If Reply.Status = IPStatus.Success Then
بعد ذلك نستطيع أن نقرأ أعضاء الكائن و التي تحتوي على نتائج ذلك الاختبار .



لقد غلفت هذه العملية بوظيفة كالتالي :

كود :
Public Sub PingIP(ByVal strIPAddress As String, _
Optional ByVal intTimeOut As Integer = 120, _
Optional ByVal intBuffer As Integer = 32, _
Optional ByVal blnDontFragment As Boolean = True, _
Optional ByVal TTL As Integer = 128)

Try

Dim pingSender As New Ping

'Genrate Buffer
Dim strBuffer As String = ""
For ii As Integer = 1 To intBuffer
strBuffer += "1"
Next

Dim buffer As Byte() = System.Text.Encoding.ASCII.GetBytes(strBuffer)
Dim Reply As PingReply = pingSender.Send(strIPAddress, intTimeOut, buffer, New PingOptions(TTL, blnDontFragment))

If Reply.Status = IPStatus.Success Then
MsgBox("IP : " & Reply.Address.ToString() & vbNewLine & _
"Length : " & Reply.Buffer.Length & vbNewLine & _
"RoundtripTime : " & Reply.RoundtripTime & vbNewLine & _
"Time To Live : " & Reply.Options.Ttl)
Else
MsgBox("No Replay")
End If

Catch ex As Exception
MessageBox.Show(ex.Message, Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try

End Sub



أتمنى أن أكون قدمت لكم شيئاً مفيداً