Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   [Komponenten] Netzwerk-Komponenten "JMMNetz" (TCP) (https://www.delphipraxis.net/140683-%5Bkomponenten%5D-netzwerk-komponenten-jmmnetz-tcp.html)

LDericher 23. Sep 2009 22:01


[Komponenten] Netzwerk-Komponenten "JMMNetz" (TCP)
 
Liste der Anhänge anzeigen (Anzahl: 1)
Also, mal wieder Ausdruck meines "Dadaismus":

Ich habe hier zwei TCP-fähige Komponenten fr euch gebastelt.
Die Grundstruktur des Ganzen (Also die Routinen, die dem jew. Socket beim Createn zugewiesen werden) ist zwar geklaut, aber den ganzen Rest drumherum habe ich selber gebaut.
Dadurch sind die Dinger etwas gewachsen... :(
Aber gut.

Ich will mich hiermit vor Allem an Neulinge der Netzwerkprogrammierung wenden, da ich die Bedienung hauptsächlich nach Benutzerfreundlichkeit und Übersichtlichkeit entwickelt habe: Der Server zB muss nur wissen, auf welchem Port er laufen soll, der Client braucht die IP des Servers und dessen Port. Dann können lustig Daten ausgetauscht werden (Nach beidseitigem Aufruf von "Connect();"). Der Rest dürfte eigentlich selbsterklärend sein.

Ach, eine Sache noch:
Mit dem System lassen sich von Hause aus "nur" einzeilige Strings verschicken.
Ich für meinen Teil habe diese meine Komponente aber auch schon zum Bilder versenden/empfangen gebracht. Siehe dazu einfach mal im Anhang nach (Graphical_Strings.zip). :P
Mehrzeilige Strings kann man ja mittels "ReplaceStr(S, #13#10, etc.);" einzeilig machen ;) Die werden auch i.d.R. nich so riesig, weil man die ja eh noch versenden will. ReplaceStr ist da vertretbar im Vergleich zur Sendung per TCP :P

Also, Viel Spaß damit!

***Dass ich hier nicht viel erklärt habe, liegt daran, dass die Kompos weitgehend selbsterklärend sein sollten***

Grüße,
Euer LDer.

Edit#1: Rechtschreibfehler entfernt

sx2008 23. Sep 2009 22:49

Re: Minimal-Netzwerk-Komponenten
 
Mal so als Denkanstoss:
Sowohl TJpegImage als auch TBitmap sind von der Klasse TGraphic abgeleitet.
Warum also Funktionen für JPEG und Bitmap doppelt vorhalten, wenn man auch mit TGraphic arbeiten kann?

LDericher 24. Sep 2009 21:55

Re: Minimal-Netzwerk-Komponenten
 
Hallo DP!

Habe meine Kompos mal geupdated!

Neuerungen:
- Jetzt können beliebige Objekte damit versendet werden, deren Klasse von "TStreamVar" abgeleitet wurde. Siehe dazu in der Demo. Geeignet für engagierte Neulinge und routinierte Fortgeschrittene.
- Deshalb heißen die Events jetzt etwas anders und es gibt ein paar mehr. Die sollten aber immer noch genauso intuitiv bedienbar sein (OnMessage -> OnText, Die Eventtypen haben etwas andere Namen nun und sind in eine eigene Unit ausgelagert).
- Der restliche Funktionsumfang wurde nicht verändert.

Ich hoffe, die Demo spricht für sich deutlich genug, wie man Objekte verschickt... Hatte leider keine Zeit für Kommentare :duck:
Ansonsten einfach hier schrei(b)en!

Gruß,
Euer LDer.

P.S.: GGf. müsst ihr noch unter Komponenten -> "Packages installieren" die "Delphi-Netzwerkkomponenten (TCP-Text)" deinstallieren!
Getestet mit: Delphi 7

LDericher 25. Sep 2009 20:06

Re: [Komponenten] Netzwerk-Komponenten "JMMNetz" (
 
Liste der Anhänge anzeigen (Anzahl: 1)
So. Jetzt könnt ihr auch meine geistreichen Kommentare zur DemoUnit lesen! :hello:

Naja, halbwegs geistreich jedenfalls. Aber ich denke es ist hilfreich :)

Gruß vom LDer

Captnemo 19. Feb 2010 13:40

Re: [Komponenten] Netzwerk-Komponenten "JMMNetz" (
 
Hi LDer,

ich hab mich mal mit deiner Komponente beschäftigt und diese in ein Projekt eingebunden, in dem ich einen Videosever / Videoclient realisiere, der in Intervallen Bilder übertragen soll. Funktioniert bestens.
Nur ein Problem hab ich.

In meiner Serveranwendung hab ich deine Komponente TJMMServer, da mehrere Clients die Bilder erhalten sollen. In meiner Clientanwendung hab ich entsprechend deine Komponente TJMMClient. Der Verbindungsaufbau klappt auch, solange der Server vor dem Client gestartet wird.
Läuft jedoch der Server nicht, oder man versucht zu einer falschen IP zu vebinden, dann wird zwar das Ereignis ConnectionAborted ausgelöst, aber danach
läßt sich die Anwendung nicht beenden. Auf Applicatin.Terminate reagiert die Anwendung schlichtweg nicht mehr.
Auch ein Disconnect führt lediglich zu einem erneuten Event ConnectionAborted. Aber irgendwo hängt die Anwendung noch. Ich weiß bloß nicht wo.

Wenn ich mich aber nach diesem ConnectionAborted nochmal zu einer IP verbinde, wo eine entsprechende Serveranwendung läuft, dann kann ich nach einem Disconnect ohne Probleme die Anwendung beenden, bzw. ein Application.Terminate funktioniert einwandfrei.

Hast du eine Ahnung woran das liegen könnte?

Astat 19. Feb 2010 17:46

Re: [Komponenten] Netzwerk-Komponenten "JMMNetz" (
 
Hallo Captnemo, hab mir die Komponente mal angesehen.
Da sind einige sehr schwerwiegende Designfehler drinnen.

1. Das Protokoll kann nicht unterscheiden welcher Clienent Daten sendet.
Bei einem Client klappt dies auch, aber wenn mehrere zum Server sendet, stöpselt dieser alles falsch zusammen.
Dann gibts Blattsalat.

2. Das Protokoll kann für multiple Clients so nicht verwendet werden
mann kann nicht davon ausgehen, dass alles synchron für jeden Client serialisiert wird.

3. Das Teil hat einen globalen buffer für alle Clients, siehe Blattsalat.

Tipp: Finger weg!

Für gutes Tutorial, guckst du da.

http://www.delphi-library.de/topic_T...400_54269.html

// EDIT weiter Infos hier
http://www.delphipraxis.net/internal...195&highlight=
http://www.delphipraxis.net/internal...623&highlight=
http://www.delphipraxis.net/internal...681&highlight=

lg. Astat

Captnemo 19. Feb 2010 19:40

Re: [Komponenten] Netzwerk-Komponenten "JMMNetz" (
 
@Astat:

Danke für deine Antwort. Im Grunde hast du Recht.
Das mch interessiert im Grund auch nur, wenn sich ein Client zum Server connected bzw. disconnected. Es werden in der Praxis wohl auch nur 2-3 clients sein, und die noch nicht mal zum gleichen Zeitpunkt.
Und Daten sendet dann auch nur der Server zu den Clients, wo eine Rückmeldung auch nicht notwendig ist. Alles nicht so aufregend.

Mich stört halt lediglich die Tatsache, dass wenn ein Client beim Connect auf keinen Server stößt, dieses zwar bemerkt wird (es kommt ja ein Event), aber dann irgendetwas tut, was das Beenden der Anwendung verhindert.
Wenn ich wüßte, was diese Verhalten auslöst, könnte ich es ja vielleicht irgendwie anders lösen.

Leider bin ich bei der Programmierung mit Sockets nicht so fit. Und aus Zeitgründen kam mir diese Komponente wie gerufen, um das Projekt erst einmal ans funktionieren zu bringen. Wenn ich dann mal mehr Zeit habe, werde ich dann vielleicht tiefer in die Materie eintauchen, und mir selbst was programmieren. Bis dahin muß halt was anderes her.
Alternativ bin ich am überlegen ob ich das über die INDY-Kompos mache, oder, weil besser programmiert, die ICS-Kompos nehme. Nur auf die Schnelle zur Übetragung von Daten (kein Text) kam mir das beim Stöbern grad wie gerufen.

Vielleicht meldet sich LDer ja auch noch dazu ;-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:42 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz