ابحث عن عنوان IP لكائن بعيد في .NET Remoting
سؤال
لديّ تطبيق خادم عميل يستخدم .NET Remoting. العملاء في شبكة LAN ولا أعرف موقعهم مقدمًا.
في بعض الأحيان ، نقوم بإجراء عمليات نقل الملفات وكحسنات ، أريد تحديد ما إذا كان العميل في الواقع على نفس الجهاز مثل الخادم (هذا ممكن تمامًا). في هذه الحالة ، أحتاج فقط إلى عمل ملف.
دعنا نقول أن العميل يدعو الطريقة عن بُعد:
RemoteFile Server.getFile (مسار السلسلة) ؛
كيف يمكنني تحديد ما إذا كان العميل (الطالب) على نفس الجهاز؟
المحلول
إذا كنت تعرف عنوان IP الخاص بالخادم ، فأنت تتصل بالطريقة عن بُعد منك ، يمكنك استخدام هذه الطريقة لمعرفة ما إذا كنت على نفس الجهاز أم لا:
using System.Net;
private bool CheckIfServer(IPAddress serverIP)
{
// Get all addresses assigned to this machine
List<IPAddress> ipAddresses = new List<IPAddress>();
ipAddresses.AddRange(Dns.GetHostAddresses(Dns.GetHostName()));
// If desirable, also include the loopback adapter
ipAddresses.Add(IPAddress.Loopback);
// Detect if this machine contains the IP for the remote server
// Note: This uses a Lambda Expression, which is only available .Net 3 or later
return ipAddresses.Exists(i => i.ToString() == serverIP.ToString());
}
إذا كنت لا تعرف ipaddress لخادمك عن بُعد ، فيمكنك بسهولة الحصول عليه باستخدام اسم مضيف الخادم مثل هذا:
Dns.GetHostAddresses("remote_host_address")
هذا يعيد ipaddress [] ، والذي يتضمن جميع العنوان الذي تم حله لهذا المضيف.