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

Ein Treffpunkt für C#-Programmierer
Anonymous
 Empfangen Sie Sendung UDP -Nachrichten auf nur ein NIC (C#, .NET) [geschlossen]

Post 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.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post