AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte [Komponenten] Netzwerk-Komponenten "JMMNetz" (TCP)
Thema durchsuchen
Ansicht
Themen-Optionen

[Komponenten] Netzwerk-Komponenten "JMMNetz" (TCP)

Ein Thema von LDericher · begonnen am 23. Sep 2009 · letzter Beitrag vom 19. Feb 2010
Antwort Antwort
Benutzerbild von LDericher
LDericher
Registriert seit: 29. Jan 2007
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).
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

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
Angehängte Dateien
Dateityp: zip jmmnetz_2.0_197.zip (334,8 KB, 65x aufgerufen)
"Clicking this button you agree with our Verantwortungsverzicht und Abkommen."
Zitat von Ein unentschlossener Programmierer:
Enabled:=true or false or true or false or true or false;
 
Benutzerbild von sx2008
sx2008

 
Delphi 2007 Professional
 
#2
  Alt 23. Sep 2009, 22:49
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?
  Mit Zitat antworten Zitat
Benutzerbild von LDericher
LDericher

 
Delphi 7 Enterprise
 
#3
  Alt 24. Sep 2009, 21:55
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
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
  Mit Zitat antworten Zitat
Benutzerbild von LDericher
LDericher

 
Delphi 7 Enterprise
 
#4
  Alt 25. Sep 2009, 20:06
So. Jetzt könnt ihr auch meine geistreichen Kommentare zur DemoUnit lesen!

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

Gruß vom LDer
Angehängte Dateien
Dateityp: pas demograf_778.pas (10,6 KB, 24x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von Captnemo
Captnemo

 
Delphi XE4 Architect
 
#5
  Alt 19. Feb 2010, 13:40
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?
Dieter
  Mit Zitat antworten Zitat
Astat

 
Lazarus
 
#6
  Alt 19. Feb 2010, 17:46
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
Lanthan Astat
  Mit Zitat antworten Zitat
Benutzerbild von Captnemo
Captnemo

 
Delphi XE4 Architect
 
#7
  Alt 19. Feb 2010, 19:40
@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
Dieter
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:39 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