Zum Inhalt springen

Kaktusfan1707

Mitglieder
  • Gesamte Inhalte

    40
  • Benutzer seit

  • Letzter Besuch

  1. 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.
  2. So, hab mir mal den Wikipedia-Artikel dazu durchgelesen und weiß jetzt so viel wie vorher.
  3. Wie müsste das in Wireshark aussehen, wenn es eine Antwort sendet? Warum wird der Port 64537 verwendet?
  4. 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.
  5. Ok, also in Wireshark sehe ich mit dem Beispiel, dass etwas gesendet wurde. Doch wie bekomme ich die Antworten darauf?
  6. Kannst du mir mal einen Codeschnipsel schicken, der funktioniert?
  7. Mit Wireshark seh ich weder die Nachricht die raus geht, noch die Antwort.
  8. Ich glaube, dass das Gerät nicht die passende Antwort schickt. Aber wie überprüfe ich das?
  9. 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.
  10. 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.
  11. @ 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(); }
  12. 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?

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...