Beispiel: Synapse TCP, Server mit mehreren Clients

Vorstellungen von Programmen, welche mit Lazarus erstellt worden.

Beispiel: Synapse TCP, Server mit mehreren Clients

Beitragvon MAC » 8. Dez 2014, 10:20 Beispiel: Synapse TCP, Server mit mehreren Clients

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 :)

GUI.png

Changelog:
1.0: Initial Version
1.1: Fixed GUI Update in MainThread.

Tag: Minimal Synapse Example, Tutorial, TCP, Client, Server, multiple Clients
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Zuletzt geändert von MAC am 8. Dez 2014, 12:12, insgesamt 2-mal geändert.
Code: Alles auswählen
Signatur := nil;
MAC
 
Beiträge: 770
Registriert: 21. Feb 2009, 13:46
OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2) | 
CPU-Target: 32Bit
Nach oben

Beitragvon theo » 8. Dez 2014, 10:47 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:
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.
theo
 
Beiträge: 7881
Registriert: 11. Sep 2006, 18:01

Beitragvon MAC » 8. Dez 2014, 11:06 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 :wink:
Code: Alles auswählen
Signatur := nil;
MAC
 
Beiträge: 770
Registriert: 21. Feb 2009, 13:46
OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2) | 
CPU-Target: 32Bit
Nach oben

Beitragvon theo » 8. Dez 2014, 11:25 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. :wink:
"Es scheint zu funzen" kann dich hier eines schönen Tages übel in den Hintern treten.

(Wobei das Problem nicht beim "Nil" liegt.)
theo
 
Beiträge: 7881
Registriert: 11. Sep 2006, 18:01

Beitragvon MAC » 8. Dez 2014, 12:05 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 :)
Code: Alles auswählen
Signatur := nil;
MAC
 
Beiträge: 770
Registriert: 21. Feb 2009, 13:46
OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2) | 
CPU-Target: 32Bit
Nach oben

Beitragvon theo » 8. Dez 2014, 12:20 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. :wink:
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.
theo
 
Beiträge: 7881
Registriert: 11. Sep 2006, 18:01

• Themenende •

Zurück zu Programme



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

porpoises-institution
accuracy-worried