Beschreibung:
Da es immer wieder einige Anfragen zum Thema gibt, habe ich eine Bibliothek geschrieben, die einem einiges davon abnimmt:
-Socket auslesen+Threading
-Handshake mit Versionsübertragung (Es soll sich ja nicht jeder x-belibige Browser verbinden)
-Pakete vor der Weiterverarbeitung an zusammensetzen und voneinander trennen
-Man kann kommandos unterschidlich handler zuordnen.
-Optionales callback, wenn Packet gesendet wurde (Nützlich z.B. bei Dateiübertragungen, um Stückweise einzulesen)
-Wenn gewünscht kann ich Verschlüsselung noch hinzufügen
Man muss die einzelnen Verarbeitungsschritte nurnoch zusammensetzen:
Connection conn = new Connection(tcpClient);
Handshake handshake = new Handshake("Protokollname", 1);
handshake.Fail += (sender,ea) => { conn.Close(); };
PacketPatcher patcher = new PacketPatcher();
CommandParser parser = new CommandParser();
//Kommanos hier registrieren
....
conn.Next = handshake;
handshake.Next = patcher;
patcher.Next = parser;
....
conn.Start();
Um auf Verbindungen zu warten gibts denConnectionWaiter.
Wer irgendwelche Events abboniert oder Callbacks angibt muss man damit rechnen, dass diese in anderen Threads ausgeführt werden. Deshalb sollte man BeginInvoke benutzen!
Wenn man Invoke statt begininvoke nimmt, senkt das die Performance.
(Da guiElemente auch geschlossen/zerstört werden können, sollte man begininvoke mit try-catch verwenden.)
Ein Beispielprogramm liegt bei: ein kleiner Chat
Schlagwörter: tcp socket sockets