Empfangen Sie Sendung UDP -Nachrichten auf nur ein NIC (C#, .NET) [geschlossen]
Posted: 20 Mar 2025, 21:56
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.) 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>
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.
Code: Select all
IPAddress.Any?
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.
}