
Kaktusfan1707
Mitglieder-
Gesamte Inhalte
40 -
Benutzer seit
-
Letzter Besuch
Über Kaktusfan1707
- Geburtstag 07/17/1990
-
Hallo, ich habe eine Windowsforms-Anwendung in C# geschrieben, die bis jetzt nur auf 64 Bit PCs läuft. Jetzt habe ich einen mit 32 Bit, auf dem es laufen soll. Zum Erstellen des Setups verwende ich InstallShield 2013 LimitedEdition. Das SQLite-Setup ist schon ein X86-Setup. Sollte somit auf 32 und 64 Bit laufen. Es wird auch ganz normal installiert. Auch meine Software lässt sich normal installieren. Beim öffnen meines Programms wird eine neue SQLite-Datenbank erstellt, falls keine gefunden wird. Die DB (nur die Datei) erstellen funktioniert, aber beim Erstellen der ersten Tabelle zeigt er einen APPCRASH-Fehler an. In den Details steht leider nur, dass es mit der System.Data.SQLite.dll zu tun hat. Habe auch schon kontrolliert, ob es die gleichen Versionen sind. Also die verwendete in der Monitoringsoftware und die installierte. Das komische ist, dass es auf einem virtuellen 64 Bit-PC funktioniert. Habe dort vorher SQLite und die Monitoringsoftware deinstalliert und die aktuellen installiert. Das gleiche beim 32 Bit-PC funktioniert nicht. Weiß aber nicht, an welchem Unterschied der PCs es noch liegen kann. Wäre über schnelle Hilfe sehr dankbar.
-
C# UDP Broadcast senden und Antworten auswerten
Kaktusfan1707 antwortete auf Kaktusfan1707's Thema in .NET
So, hab mir mal den Wikipedia-Artikel dazu durchgelesen und weiß jetzt so viel wie vorher. -
C# UDP Broadcast senden und Antworten auswerten
Kaktusfan1707 antwortete auf Kaktusfan1707's Thema in .NET
Wie müsste das in Wireshark aussehen, wenn es eine Antwort sendet? Warum wird der Port 64537 verwendet? -
C# UDP Broadcast senden und Antworten auswerten
Kaktusfan1707 antwortete auf Kaktusfan1707's Thema in .NET
In der Spalte Info steht "Source port: 64537 Destination Port 62529" "Source port: 37282 Destination Port 64537" "Source port: 44122 Destination Port 64537" "Source port: 58496 Destination Port 64537" "Source port: 58314 Destination Port 64537" Der Port 62529 ist der, den ich angegeben habe. Eine Antwort auf den Befehl "Version" sehe ich nicht. -
C# UDP Broadcast senden und Antworten auswerten
Kaktusfan1707 antwortete auf Kaktusfan1707's Thema in .NET
Ok, also in Wireshark sehe ich mit dem Beispiel, dass etwas gesendet wurde. Doch wie bekomme ich die Antworten darauf? -
C# UDP Broadcast senden und Antworten auswerten
Kaktusfan1707 antwortete auf Kaktusfan1707's Thema in .NET
Einen zum Senden eines UDP-Pakets in C#. -
C# UDP Broadcast senden und Antworten auswerten
Kaktusfan1707 antwortete auf Kaktusfan1707's Thema in .NET
Kannst du mir mal einen Codeschnipsel schicken, der funktioniert? -
C# UDP Broadcast senden und Antworten auswerten
Kaktusfan1707 antwortete auf Kaktusfan1707's Thema in .NET
Mit Wireshark seh ich weder die Nachricht die raus geht, noch die Antwort. -
C# UDP Broadcast senden und Antworten auswerten
Kaktusfan1707 antwortete auf Kaktusfan1707's Thema in .NET
Ich glaube, dass das Gerät nicht die passende Antwort schickt. Aber wie überprüfe ich das? -
C# UDP Broadcast senden und Antworten auswerten
Kaktusfan1707 antwortete auf Kaktusfan1707's Thema in .NET
Leider bin ich immer noch nicht weiter. -
C# UDP Broadcast senden und Antworten auswerten
Kaktusfan1707 antwortete auf Kaktusfan1707's Thema in .NET
Das Gerät ist ein kleiner PC mit einer Art Linux in einem speziellen Gehäuse. Bei einem meiner Tests kam als Antwort schon das richtige zurück. Allerdings war das kein Broadcast. Die Anforderung ist, dass über den Port 62529 ein UDP-Befehl gesendet wird. In diesem Fall "Version". So kann ich also mit meinem C#-Programm feststellen wie viele Geräte im Netzwerk sind und welche IP sie haben. Anschließend kann ich im C#-Programm für jedes ein Profil anlegen und per SSH Daten holen. -
C# UDP Broadcast senden und Antworten auswerten
Kaktusfan1707 antwortete auf Kaktusfan1707's Thema in .NET
Nein. Wie? -
C# UDP Broadcast senden und Antworten auswerten
Kaktusfan1707 antwortete auf Kaktusfan1707's Thema in .NET
Wie bekomme ich dann die Antwort des Geräts? Ich möchte ja den Befehl "Version" verschicken und alle erreichbaren Geräte schicken als Antwort z.B. "V.22.0.0 Testversion 2" zurück. Die Antwort muss ich dann auswerten. -
C# UDP Broadcast senden und Antworten auswerten
Kaktusfan1707 antwortete auf Kaktusfan1707's Thema in .NET
@ Klotzkopp Logischerweise in der einzigen Zeile, wo es verwendet wird (var ergebnis ...) Habe jetzt folgendes ausprobiert. Es werden zwei Threads gestartet. Einer zum Senden und einer zum Empfangen. Allerdings empfange ich nur den Befehl selbst und nicht die Antwort des Geräts. Außerdem ist in dem Empfangenthread noch eine Endlosscheife, bei der ich nicht weiß wie ich sie ersetzen kann. static void Main(string[] args) { RetrieveMessage(); SendMessage(); Console.ReadLine(); } public static void SendMessage() { BackgroundWorker DBSyncWorker = new BackgroundWorker(); // this allows our worker to report progress during work DBSyncWorker.WorkerReportsProgress = true; // what to do in the background thread DBSyncWorker.DoWork += new DoWorkEventHandler( delegate(object o, DoWorkEventArgs args) { BackgroundWorker b = o as BackgroundWorker; //b.ReportProgress(profile.Id); System.Net.Sockets.UdpClient sock = new System.Net.Sockets.UdpClient(); IPEndPoint iep = new IPEndPoint(IPAddress.Broadcast, 62529); byte[] data = Encoding.ASCII.GetBytes("Version"); sock.Send(data, data.Length, iep); sock.Close(); Console.WriteLine("Message sent."); }); // what to do when progress changed (update the progress bar for example) DBSyncWorker.ProgressChanged += new ProgressChangedEventHandler( delegate(object o, ProgressChangedEventArgs args) { }); // what to do when worker completes its task (notify the user) DBSyncWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler( delegate(object o, RunWorkerCompletedEventArgs args) { Console.WriteLine("Fertig Senden."); Console.ReadLine(); }); DBSyncWorker.RunWorkerAsync(); } public static void RetrieveMessage() { BackgroundWorker DBSyncWorker = new BackgroundWorker(); // this allows our worker to report progress during work DBSyncWorker.WorkerReportsProgress = true; // what to do in the background thread DBSyncWorker.DoWork += new DoWorkEventHandler( delegate(object o, DoWorkEventArgs args) { BackgroundWorker b = o as BackgroundWorker; //b.ReportProgress(profile.Id); System.Net.Sockets.UdpClient server = new System.Net.Sockets.UdpClient(62529); IPEndPoint sender = new IPEndPoint(IPAddress.Any, 62529); byte[] data = new byte[1024]; bool cancel = false; while (cancel == false) { data = server.Receive(ref sender); string stringData = Encoding.ASCII.GetString(data, 0, data.Length); Console.WriteLine("Response from " + sender.Address + Environment.NewLine + "Message: " + stringData); Thread.Sleep(100); } server.Close(); }); // what to do when progress changed (update the progress bar for example) DBSyncWorker.ProgressChanged += new ProgressChangedEventHandler( delegate(object o, ProgressChangedEventArgs args) { }); // what to do when worker completes its task (notify the user) DBSyncWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler( delegate(object o, RunWorkerCompletedEventArgs args) { Console.WriteLine("Fertig Empfangen."); Console.ReadLine(); }); DBSyncWorker.RunWorkerAsync(); } -
C# UDP Broadcast senden und Antworten auswerten
Kaktusfan1707 antwortete auf Kaktusfan1707's Thema in .NET
Also ich habe bis jetzt folgendes ausprobiert, allerdings momentan nicht als Broadcast sondern an eine bestimme IP. Als Ergebnis kommt 7 zurück. Dort sollte aber ein String drin stehen in der die Versionsnummer von dem Gerät steht. public bool openUdpPort() { IPEndPoint ipEndpo; int port = 62529; try { String ip = "192.168.1.71"; //Socket funktioniert Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); //socket.SetSocketOption(0xFFFF, socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, sizeof(int) == (-1)); //socket.Bind(e); socket.Connect(IPAddress.Parse(ip), port); //IP-Adresse und Port an welchen geschickt werden soll IPAddress ipAdr = IPAddress.Parse(ip); ipEndpo = new IPEndPoint(ipAdr, port); ASCIIEncoding enc = new ASCIIEncoding(); String t = "Version"; byte[] b = Encoding.ASCII.GetBytes(t); //Extra Methode, welche ein String eben in ein ByteArray Convertiert //Sendet an dem Socket eben die Daten raus... //Du musst das jetzt nur noch auf Broadcast umstellen und anschließend eine while schleife mit socket.receive() machen var ergebnis = socket.SendTo(b, SocketFlags.None, ipEndpo); return true; } catch (Exception ex) { Console.WriteLine("ERROR3: " + ex.Message); return false; } } Habe auch noch einige andere Beispiele aus dem Internet probiert. Soll ich alle hier posten?