Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von weismat
Thema: [Erledigt] TCP Verlust von Paketen oder falsche Reihenfolge möglich?
Am im Forum: Netzwerktechnologien

Da ich kein VB kann, poste ich Dir mal funktionierenden C# Code zum Lesen:


                var length = binaryReader.ReadInt32();
                var messageType = binaryReader.ReadInt32();
                if (messageType < 0)
                {
                    var logMessage = "read bas message type:" + messageType;
                    Log.Fatal(logMessage);
                    throw new Exception(logMessage);
                }

                var bytes = binaryReader.ReadBytes(length)
Das Senden schaut dann so aus:


                var body = message.ToProtobuf();
                var lengthBytes = BitConverter.GetBytes(body.Length);
                var typeBytes = BitConverter.GetBytes(message.MsgType);
                lock (sendLocker)
                {
                    binaryWriter.Write(lengthBytes);
                    binaryWriter.Write(typeBytes);
                    binaryWriter.Write(body);
                    binaryWriter.Flush();
                }

Vielleicht hilft Dir das.

Thema: [Erledigt] TCP Verlust von Paketen oder falsche Reihenfolge möglich?
Am im Forum: Netzwerktechnologien

Du solltest Dein Lesen so abändern, daß Du explizit 4 Byte Länge liest und dann die genaue Länge Bytes liest. Wenn Du schnell hintereinander sendest, liest Du irgendwann mit Deinem Code mehr als eine Nachricht in Deinen 2K Buffer ein und dann ist alles kaputt. TCP ist ein Stream - wenn Du schnell hintereinander sendest, dann werden aus mehreren Write ein Receive.

Thema: [Erledigt] TCP Verlust von Paketen oder falsche Reihenfolge möglich?
Am im Forum: Netzwerktechnologien

TCP sichert immer die Reihenfolge ab.
Bei größeren Mengen ist es wichtig, dass Du den Buffer in einem eigenen Thread in eine Queue schreibst, da ein voller Buffer zu Requeues führt und dann schnell eine Situation entstehen kann, wo gar nix mehr geht, da die Requeues quasi alles lahmlegen.

Thema: Typ temporär zur Laufzeit erstellen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Du könntest auch mit Reflection.Emit arbeiten.

Thema: Marshalling von struct Member in Klasse
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hast Du [In,Out] gesetzt?

Thema: Marshalling von struct Member in Klasse
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

A und B müssen Structs/Werttypen sein.
Klassen sind Referenzen und können daher nicht Marshalling umgewandelt/kopiert werden.
Warum soll B denn eine Klasse sein?

Thema: Wann wird Control.BeginInvoke durch Delegate aufgerufen?
Am im Forum: GUI: Windows-Forms

Ich habe bewusst von Werten und nicht Objekten gesprochen - Werttypen.

Thema: Wann wird Control.BeginInvoke durch Delegate aufgerufen?
Am im Forum: GUI: Windows-Forms

Innerhalb des Invoke-Teils solltest Du wenn möglich nicht auf das Dictionary zugreifen.
Du könntest z.B. vor dem Invoke Deinen Wert in eine lokale Variable schreiben, so daß Du dann im GUI Thread nicht mehr das Dictionary schützen musst.
Bei der Reihenfolge ist schon klar, daß Invoke0 immer vor Invoke2 kommt - aber ob etwas dazwischen passiert oder nicht, dass ist nicht klar - so hatte ich das gemeint.

Thema: Wann wird Control.BeginInvoke durch Delegate aufgerufen?
Am im Forum: GUI: Windows-Forms

Du solltest in Deinem Programm beide Reihenfolgen abdecken.
Wenn Du mit Invoke arbeitest, dann ist keine Reihenfolge garantiert.
Willst Du eine Reihenfolge herstellen, dann musst Du mittels lock synchronisieren.

Thema: Nach Update auf Windows 10 wirft Datetime Parse/Tryparse eine Exception (Ländereinstellungen gleich)
Am im Forum: Rund um die Programmierung

Wenn man Roslyn/VS 2015 benutzt, dann kann man sich das Nuget Package herunterladen und muss dann unter Code Analysis "Enable Code Analysis on Build" auswählen.

Thema: Nach Update auf Windows 10 wirft Datetime Parse/Tryparse eine Exception (Ländereinstellungen gleich)
Am im Forum: Rund um die Programmierung

FxCop ist eine saubere Möglichkeit, wie man seinen Code auf solche Fehler automatisch prüft.

Thema: Marshalling Array of Structs
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Würde mir da nicht zuviel den Kopf zerbrechen...
Wenn das Auspacken nicht 100.000 mal am Tag läuft, spielt das keine wirkliche Rolle.

Thema: Wie erstelle ich ein Objekt einmal und verwende es dort, wo ich es brauche in C#? --> DI/IoC
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Zu dem Thema gibt es ein sehr gutes Buch
Dependency Injection in .NET - da wird das Thema sehr detailliert und umfassend behandelt.
Schön ist es auch, daß es dort Muster für die verschiedenen Applikations-Typen Console, WPF und Webapp gibt.

Thema: Wie erstelle ich ein Objekt einmal und verwende es dort, wo ich es brauche in C#? --> DI/IoC
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Poor man's dependency injection kann ein guter Kompromiss zwischen wartbarem Code und Kanonen auf Spatzen durch eine IoC Komponente sein.

Thema: Überladung von Konstruktoren mit quasi gleicher Signatur
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Factory Methode finde ich am besten, weil man dann einen sprechenden Namen zum Erstellen des Objekts wählen kann.
Ansonsten bieten sich noch optionale Parameter beim Konstruktor an - das ist aber weniger sauber als die Factory Methode.
Allgemein empfehle ich für solche Fragen immer Framework Design Guidelines - dort gibt es die Regel:

Zitat
CONSIDER using a static factory method instead of a constructor if the semantics of the desired operation do not map directly to the construction of a new instance, or if following the constructor design guidelines feels unnatural.

Thema: Marshalling Array of Structs
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Bitte sei präzise.
Wie sieht genau die C++ Signatur aus?
Welche Länge hast Du, wenn Du eine sizeof in einem kleinen C++ Programm und C# ausführst?
Wenn die Längen gleich sind, dann kannst Du an das Befüllen denken.
Das die Länge statisch ist, ist normal - es sei denn Du hast eine Längenfeld in der C++ Struktur - dann müßtest Du selber mit einer flexiblen Länge arbeiten.

Thema: Mac: Visual Studio unter Bootcamp und/oder Parallels?
Am im Forum: Smalltalk

Ich denke, daß ich heute abend es auch erstmal mit Parallels probieren werde.

Thema: Mac: Visual Studio unter Bootcamp und/oder Parallels?
Am im Forum: Smalltalk

Ich bin gerade dabei mein neues Mac Airbook aufzusetzen.
Würdet Ihr Visual Studio unter Parallels und/oder Bootcamp aufsetzen?
Falls die Performance nicht zu sehr leidet, dann hört sich Parallels sehr interessant an.
Wie sind Eure Erfahrungen?

Thema: Suche Lib um Kamerabilder von Messwerten auszuwerten
Am im Forum: Rund um die Programmierung

Würde mir Accord.NET anschauen.
Da gibt es ML Algorithmen für Bilder.

Thema: Beim Download von JSON via HTTPS wird die Verbindung von Remotehost geschlossen
Am im Forum: Web-Technologien

Probier mal das hier. So müsstest Du direkt Code bekommen...

Thema: Parallel.ForEach - Wieso geht er nicht durch alle Schleifen ?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Du musst counter entweder mit lock synchroniseren oder mittels Interlocked.Increment(ref counter); threadsafe hochzählen.
Ist die MyValueList synchronisiert? Da könntest Du auch eine Exception bekommen.

Thema: XML-Serialisierung von double-Werten
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Wenn es um Präzision geht, dann solltest Du decimal nehmen.

Thema: DataGrid aus Excelliste befüllen --> Databinding?
Am im Forum: GUI: WPF und XAML

Ich würde keine ArrayList, sondern eine ObservableCollection nehmen.
Wo setzt Du den DataContext? Ist das Füllen im MainThread oder im Hintergrund?

Thema: Daily Rate in Job Offer: Bedeutet das wirklich den Tagessatz den man Brutto bekommt?
Am im Forum: Smalltalk

Fast genau der Betrag der aus dem Gulp Stundensatz Kalkulator herauskommt - dort kommen 85 Euro/Stunde heraus - bei 8 h wären 718 Euro 89 Euro/h;-) Ansonsten einfach nachfragen, was gemeint ist....

Thema: Wie übersetze ich einen Pointer of Pointer (C++) in C#?
Am im Forum: Rund um die Programmierung

Du musst mit Structs, nicht mit Classes arbeiten.
C-Typen sind Werte, keine Referenzen.
Wie gesagt - schreibe Dir Dummy C++ und C# Programme, die nur mit sizeof die Länge der Strukturen vergleichen - erst wenn das übereinstimmt, dann darfst Du weitermachen.
Die Alternative in Deinem Fall wäre sonst Marshall.Copy zum Kopieren von Arrays am Stück.

Thema: Wie übersetze ich einen Pointer of Pointer (C++) in C#?
Am im Forum: Rund um die Programmierung

Du solltest die Länge des Arrays wissen.
Dann kannst Du mittels Pointer-Arithmetik/StartAdresse + Index*sizeof(Struct) jedes Element des Arrays einzeln mit Marshal.PtrToStructure umwandeln und kopieren.

Thema: Unmanaged Dll C++ die Funktionen in C Sharp einbinden
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Mittels DllImport kannst Du nur auf C Funktionen und nicht auf C++ Methoden/Objekte zugreifen.
Ob Managed C++ oder ein C Wrapper weniger Arbeit ist, muss Du selber prüfen.

Thema: Pattern um Nachrichten aus einer lib zu erhalten
Am im Forum: Rund um die Programmierung

Rx bietet sozusagen Linq für Events.
Wenn Du sauber mit Events arbeitest, dann brauchst Du 3 Eventhandler

  • OnNext
  • OnError
  • OnCompleted
- in Rx ist das ein Observable, daß Du dann auch mit einem Statement statt 3 abarbeiten kannst.

Thema: ApplicationException nach einem Click
Am im Forum: GUI: WPF und XAML

Das wars....3rd Party Komponente mit eigener App-Domain.
Jetzt weiß ich, was ich machen muss.
Vielen Dank für die tolle und kompetente Hilfe!

Thema: ApplicationException nach einem Click
Am im Forum: GUI: WPF und XAML

Das hat leider auch nicht funktioniert. Der Crash passiert immer noch, aber ich sehe keinen StackTrace.