مشكلة في محاولة لحزم Unicapt إلى الشبكات المتاحة

StackOverflow https://stackoverflow.com/questions/1096497

  •  11-09-2019
  •  | 
  •  

سؤال

محاولة Unicast الحزم إلى الشبكات المتاحة. هناك 3 شبكات تماما. تمكنت من الحصول على حزم في شبكة واحدة فقط. لكنني غير قادر على تلقي الحزم في شبكات مختلفة.

باستخدام هذا الرمز ..

        foreach (var i in System.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces())
        {
            foreach (var ua in i.GetIPProperties().UnicastAddresses)
            {
                System.Windows.Forms.MessageBox.Show(ua.Address.ToString());
                IPAddress Tip = IPAddress.Parse(ua.Address.ToString());
                IPEndPoint targetEndPoint = new IPEndPoint(Tip, iTargetPort);
                MyUdpClient sendUdpClient = new MyUdpClient();
                int numBytesSent = sendUdpClient.Send(CombineHeaderBody, CombineHeaderBody.Length, targetEndPoint);
            }
        }

ما هو prob؟ شكرا.

هل كانت مفيدة؟

المحلول

أعتقد أنك تحاول إرسال حزم لنفسك؟

هل أنت متأكد من أنك لا ترتبط بعناوين Unicast و Multicast؟

حسنا، أنت لا تحاول ...

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

نصائح أخرى

نظرا لأن لديك أكثر من واجهة واحدة أنت مترابط متعدد. لكل واجهة سيكون لديك ipaddress. لذلك مع ثلاثة واجهات سيكون لديك ثلاثة IP محلي. عند استخدام UDPClient، تحتاج إلى تحديد الواجهة لإرسالها باستخدام IP الخاص بها.

يتيح لك افتراض أن لديك ثلاثة IP المحلي التالية

10.1.0.1
10.2.0.1
10.4.0.1
مع NetMask من 255.255.0.0

وتريد إرسال حزمة UDP إلى 10.2.5.5 تحتاج إلى إرسالها 10.2.0.1 لذلك استخدم التعليمات البرمجية التالية

IPEndPoint localEndPoint = new IPEndPoint(IPAddress.Parse("10.2.0.1"), 0);
IPEndPoint targetEndPoint = new IPEndPoint(IPAddress.Parse("10.2.5.5"), iTargetPort);
UdpClient sendUdpClient = new UdpClient(localEndPoint);
int numBytesSent = sendUdpClient.Send(CombineHeaderBody, CombineHeaderBody.Length, targetEndPoint);

وإرسال حزمة UDP إلى 10.1.90.5 تحتاج إلى إرسالها 10.1.0.1 لذلك استخدم التعليمات البرمجية التالية

IPEndPoint localEndPoint = new IPEndPoint(IPAddress.Parse("10.1.0.1"), 0);
IPEndPoint targetEndPoint = new IPEndPoint(IPAddress.Parse("10.1.90.5"), iTargetPort);
UdpClient sendUdpClient = new UdpClient(localEndPoint);
int numBytesSent = sendUdpClient.Send(CombineHeaderBody, CombineHeaderBody.Length, targetEndPoint);

الفرق بين الاثنين هي lealendintpoint ونقطة الهدف.

أنا لست كثيرا من Guru شبكة، لكنني سأحاول أن أطعن في ذلك. أفترض أن جميع الحزم يتم إرسالها من خلال الواجهة الافتراضية التي تعرف ثلاثة عناوين: إنها ذاتها، والاسترجاع، والبوابة. لذلك ستحتاج حزمة من 192.168.1.111 المتجهة إلى 10.10.111 إلى المرور عبر البوابة الافتراضية (دعنا نقول هذا فقط 192.168.1.1)، ولكن ماذا لو كان 192.168.1.1 لا يعرف الطريق إلى 10.10.0.0، ثم المضيف الوجهة غير قابل للوصول الصحيح؟ أنا لا أعرف، هذا تخميني.

على الرغم من، ربما أنا مخطئ. ربما لا يستخدم جهاز افتراضي ويستخدم بدلا من استخدام جميع الواجهات المتاحة جنبا إلى جنب مع مكدس TCP / IP. على أي حال، أنا فضولي لمعرفة ما تجده رغم ذلك. يرجى تبقينا تحديثها.

بالإضافة إلى ذلك، مشيرا إلى أسفل عناوين قد تكون مفيدة. تتبع الطريق هو صديقك.

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