Ich hab mich in letzter Zeit mit Synapse und TCP beschäftigt und hab im Internet kein minimal-Programm gefunden.
Deswegen hab ich mal ein kleines (ca. 250 Zeilen Code) Beispiel zu einem Server mit mehren Clienten geschrieben.
Es ist quasi ein kleiner Chat, entweder schickt ein Client eine Nachricht an den Server, oder der Server antworted allen Clienten...
Es dient als kleiner Einstieg in Synapse, fühlt euch frei es als Vorlage für den Einstieg in Synapse zu verweden...
Version 1.0 - 08.12.2014
Betriebssystem: eigentlich jedes, welches Synapse unterstützt, getestet unter Windows 7
Ihr braucht die Synapse Quellen - http://synapse.ararat.cz/doku.php/download
Es handelt sich wirklich nur um eine Minimale Version in der das wesentliche Programmiert ist
Hinweis (danke theo): durch das Verwendungen von mehreren Threads muss man das Programm untereinander synchronisieren (http://wiki.freepascal.org/Multithreade ... se_TThread),
Die GUI in diesem Beispiel, macht das nicht (nur teilweise). Man sollte sich je nach Anwendungsfall überlegen ob die Klasse ihre Internen Events in ihrem eigenen Thread weitergibt oder immer ein Synchronize verwendet, bzw spätestens wenn man die Oberfläche ändert Syncronisieren. Hier ist das weggelassen um das wesentliche (die eigentliche TCP Verbindung) im Vordergrund zu halten.
Viel Spaß, ich hoffe das kann mal jemanden behilflich sein
Changelog:
1.0: Initial Version
1.1: Fixed GUI Update in MainThread.
Tag: Minimal Synapse Example, Tutorial, TCP, Client, Server, multiple Clients
Beispiel: Synapse TCP, Server mit mehreren Clients
-
- Beiträge: 770
- Registriert: Sa 21. Feb 2009, 13:46
- OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
- CPU-Target: 32Bit
Beispiel: Synapse TCP, Server mit mehreren Clients
- Dateianhänge
-
- synapseExample v1.1.zip
- Version 1.1: Source + Win32 Exe
- (873.99 KiB) 390-mal heruntergeladen
-
- synapseExample v1.0.zip
- Version 1.0: Source + Win32 Exe
- (873.88 KiB) 242-mal heruntergeladen
Zuletzt geändert von MAC am Mo 8. Dez 2014, 12:12, insgesamt 2-mal geändert.
Code: Alles auswählen
Signatur := nil;
Re: Beispiel: Synapse TCP, Server mit mehreren Clients
Eigentlich eine gute Sache, aber denkst du nicht, man sollte vielleicht TThread.Synchronize anwenden, bevor man mit dem GUI parliert?
http://wiki.freepascal.org/Multithreade ... se_TThread
Und dann verstehe ich persönlich nicht, warum man sich mit sowas abquält:
wenn es doch TList oder TObjectList gibt, wo ein simples "Add" ausreicht und was erst noch performanter ist.
http://wiki.freepascal.org/Multithreade ... se_TThread
Und dann verstehe ich persönlich nicht, warum man sich mit sowas abquält:
Code: Alles auswählen
setlength(master.Clients,length(master.Clients)+1);
wenn es doch TList oder TObjectList gibt, wo ein simples "Add" ausreicht und was erst noch performanter ist.
-
- Beiträge: 770
- Registriert: Sa 21. Feb 2009, 13:46
- OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
- CPU-Target: 32Bit
Re: Beispiel: Synapse TCP, Server mit mehreren Clients
Stimmt natürlich.
ich hab das behoben mit TThread.Synchronize(nil,@Form1.UpdateGUI); , wobei UpdateGUI die Änderung an dem UI vornimmt, ich weiß nicht ob man da nil übergeben darf, aber es scheint zu funktionieren
ich hab das behoben mit TThread.Synchronize(nil,@Form1.UpdateGUI); , wobei UpdateGUI die Änderung an dem UI vornimmt, ich weiß nicht ob man da nil übergeben darf, aber es scheint zu funktionieren
Code: Alles auswählen
Signatur := nil;
Re: Beispiel: Synapse TCP, Server mit mehreren Clients
Und beim Server?
Komm, nimm dir nochmal Zeit, das Ganze zu überdenken.
Threads und Unicode habe eines gemeinsam: Sie eignen sich gar nicht für den Versuch-und-Irrtum Ansatz.
"Es scheint zu funzen" kann dich hier eines schönen Tages übel in den Hintern treten.
(Wobei das Problem nicht beim "Nil" liegt.)
Komm, nimm dir nochmal Zeit, das Ganze zu überdenken.
Threads und Unicode habe eines gemeinsam: Sie eignen sich gar nicht für den Versuch-und-Irrtum Ansatz.
"Es scheint zu funzen" kann dich hier eines schönen Tages übel in den Hintern treten.
(Wobei das Problem nicht beim "Nil" liegt.)
-
- Beiträge: 770
- Registriert: Sa 21. Feb 2009, 13:46
- OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
- CPU-Target: 32Bit
Re: Beispiel: Synapse TCP, Server mit mehreren Clients
danke für den Tipp,
Hinsichtlich der Probleme mit mehreren Threads könnte man da echt noch vieles verbessern.
Das würde aber noch einiges an Code benötigen, deswegen lass ich es hier aber einmal bewusst weg, schließlich soll es ein kleines Beispiel mit TCP sein und nicht "ein kleines Beispiel mit TCP und 300 Zeilen SyncronisationsCode"
Ich schreibe mal eine Dicke Warnung in den Post, das man sich mit Multithreading auseinandersetzten soll
Hinsichtlich der Probleme mit mehreren Threads könnte man da echt noch vieles verbessern.
Das würde aber noch einiges an Code benötigen, deswegen lass ich es hier aber einmal bewusst weg, schließlich soll es ein kleines Beispiel mit TCP sein und nicht "ein kleines Beispiel mit TCP und 300 Zeilen SyncronisationsCode"
Ich schreibe mal eine Dicke Warnung in den Post, das man sich mit Multithreading auseinandersetzten soll
Code: Alles auswählen
Signatur := nil;
Re: Beispiel: Synapse TCP, Server mit mehreren Clients
MAC hat geschrieben:mit TCP sein und nicht "ein kleines Beispiel mit TCP und 300 Zeilen SyncronisationsCode"
Darum geht's ja nicht. Ich glaube du erkennst den Ernst der Lage nicht.
Dein Beispiel kann auf Dauer nicht funktionieren. Es wird zu bösen Fehlern kommen.
Es geht nicht um Features, sondern um das grundlegende Funktionieren.
Wenn du es einfacher haben willst, dann lass einfach die Meldungen an das GUI weg. Das wäre vertretbar.