Page 1 of 1

Empfangen Sie Sendung UDP -Nachrichten auf nur ein NIC (C#, .NET) [geschlossen]

Posted: 20 Mar 2025, 21:56
by Anonymous
Ich habe ein Gadget (eine Maerklin -Kontrollstation zum Ausführen von Modellzügen), das seine Befehle als UDP -Pakete in meinem lokalen Netzwerk überträgt. Ich habe einen Hörer (C#) geschrieben, der diese Nachrichten hört und sie analysiert. Das funktioniert einwandfrei.

Code: Select all

IPAddress.Any?
) Welches mein Programm vollständig vermasselt, da es eine Abfolge von Nachrichten gibt, die manchmal ununterbrochen erfasst werden müssen. Mein Programm funktioniert gut, wenn ich mit Ethernet oder Wi-Fi verbunden bin, aber es bricht zusammen, wenn beide verbunden sind. < /P>
Ich denke, ich habe es herausgefunden, zumindest funktioniert es für mich. Vielleicht war meine Frage schlecht formuliert, aber hier ist meine Lösung: < /p>

Code: Select all

    private IPAddress SelectIPAddress()
{
Dictionary networkAdaptors = new Dictionary();
IPAddress selectedIP = null;

foreach( NetworkInterface netInterface in NetworkInterface.GetAllNetworkInterfaces() )
{
if( netInterface.OperationalStatus == OperationalStatus.Up && ( netInterface.NetworkInterfaceType == NetworkInterfaceType.Ethernet ||  netInterface.NetworkInterfaceType == NetworkInterfaceType.Wireless80211 ) )
{
if( !networkAdaptors.ContainsKey( netInterface.NetworkInterfaceType ) )
{
networkAdaptors.Add( netInterface.NetworkInterfaceType, new List() );
}

IPInterfaceProperties ipProps = netInterface.GetIPProperties();
foreach( UnicastIPAddressInformation addr in ipProps.UnicastAddresses )
{
if( !addr.Address.IsIPv6LinkLocal )  // I'm a traditionalist
{
networkAdaptors[netInterface.NetworkInterfaceType].Add( addr.Address );
}
}
}
}

if( networkAdaptors.ContainsKey( NetworkInterfaceType.Ethernet ) )
{
// Just use the first Ethernet interface
//
selectedIP = networkAdaptors[NetworkInterfaceType.Ethernet][0];
}
else if( networkAdaptors.ContainsKey( NetworkInterfaceType.Wireless80211 ) )
{
// Otherwise just use the first WiFi interface
//
selectedIP = networkAdaptors[NetworkInterfaceType.Wireless80211][0];
}

return selectedIP;  // null means no suitable network interface found.
}
Anstatt ipaddress.any in Socket.bind () zu verwenden, verwende ich das Ergebnis dieser Funktion, es sei denn, es ist null. In diesem Fall wird das Programm beendet.