سؤال

لديّ تطبيق خادم عميل يستخدم .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 [] ، والذي يتضمن جميع العنوان الذي تم حله لهذا المضيف.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top