Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   Komponente für LAN-Verbindungen (https://www.delphipraxis.net/103576-komponente-fuer-lan-verbindungen.html)

sirius 17. Nov 2007 22:35


Komponente für LAN-Verbindungen
 
Liste der Anhänge anzeigen (Anzahl: 2)
(Weis nicht ob Code Library oder hier)

Im Anhang befindet sich eine Komponente, welche:
-per UDP Broadcast automatisch alle anderen Komponenten im LAN aufspürt und sich zu denen verbindet
-eine TCP-Verbindung zu jeder anderen Komponente hat (wenn gewünscht)
-Text, Zahlen oder Streams senden und natürlich auch empfangen kann
-inkl. UserListe
-mittels indirekter UDP-Port-Verwaltung auch mehrere Clients auf einem Rechner ermöglicht
mehr fällt mir jetzt nicht ein

Ein kleines Beispiel hängt auch an.
Ja, und es sind zwei Komponenten, die eine TLanConnectStream hat über TLanConnect nur die Erweiterung der Streams

Prinzipiell kann man die Komponente instanzieren, einen UserNamen vergeben und aktivieren und bekommt über OnChangeUser (+TLanConnect.Clientusers oder TLanConnect.Clientsockets) schon mitgeteilt wer noch im LAN zur Verfügung ist.
An diejenigen kann man dann per SendText, SendNumber,... Sendxxx etwas verschicken. Die Glücklichen erhalten die Nachricht in den dazugehörigen OnRecievexxx-Ereignissen.
Das war dann auch schon alles.
Man kann wie gesagt auch Streams senden. Aber hier liegt der Teufel drin (deswegen auch noch keiner 1-er Version). Derzeit funktioniert zwar alles, aber mal sehen, wo der nächtse Fehler auftritt.
Achtung: Man muss die Streams nach dem Senden immer selber freigeben (auf das Ereignis warten)!

Kurze Funktionserklärung (was macht die Komponente im Hintergrund am Anfang):
1. Einrichten eines TCP-ServerSockets
2. Einrichten eines UDP-Sockets auf vereinbarter Portzahl oder indirekt auf einem anderne Port und anmelden bei der anscheinend vorhandenen anderen Instanz, welche den Port schon belegt (Indirekter UDP-Modus)
3. Versenden von BroadCast-Messages mit LanName und TCP-ServerSocket-Portnummer
4. Darauf reagieren alle Komponenten im LAN, welche denselben LANNamen benutzen und Verbinden sich mittels TCP zum ServerSocket
5. Austausch von Usernamen und Hostnamen
6. ab hier kann gesendet werden

Eigenschaften:
-auschließliche Verwendung von WINSOCK (WinAPI)
-Alle TCP-clients einer Komponente benutzen den gleichen Port
-komplett ereignissgesteuert (allerdings mit Hagens Delay-Funktion [ohne Verwendung von TApplication], wenn der Socket zum Schreiben blockiert ist)
-keine Verwendung von Threads (kann man aber problemlos in einen Thread legen)


So, ich glaube ich habe erstmal alles. (genauere Erklärungen kommen vielleicht noch)

ghost007 18. Nov 2007 05:00

Re: Komponente für LAN-Verbindungen
 
Hallo,
hab deine kompo mal installiert und dann das test proggi compiliert und laufen gelassen, er erkennt die user im LAN über UDP aber die datei kommt nirgends an und texte kann ich auch keine versenden.

MfG - Ghost007

sirius 18. Nov 2007 09:01

Re: Komponente für LAN-Verbindungen
 
Ja, du musst wahrscheinlich noch die User in der Listbox auswählen, an die du senden willst
(Sorry, die Erklärung habe ich nicht erwähnt)

ghost007 18. Nov 2007 10:32

Re: Komponente für LAN-Verbindungen
 
Hi,
habs nu nochmal getestet.
Also das text senden geht nun.
Bei dem datei senden, kommt zwar beim ziel n save dialog, jedoch wenn man nen datei namen eingibt und auf "speichern" klickt, kommt n error "Stream read Error"

MfG - Ghost007

sirius 18. Nov 2007 17:56

Re: Komponente für LAN-Verbindungen
 
Zitat:

Zitat von ghost007
Hi,
habs nu nochmal getestet.
Also das text senden geht nun.
Bei dem datei senden, kommt zwar beim ziel n save dialog, jedoch wenn man nen datei namen eingibt und auf "speichern" klickt, kommt n error "Stream read Error"
MfG - Ghost007

:gruebel: Schöner Fehler. Und kommt nicht einmal aus meiner Komponente. In dem Ereignis direkt im Programm steht f.CopyFrom(Stream,Stream.size). Wenn man daraus f.CopyFrom(Stream,0) macht klappt es.
Dabei ist Stream ein TFilestream, was kurz vorher geöffnet wurde (Die Position ist bei 0)

:idea: Ahh, wenn die zu übertragene Datei klein ist, wird am Empfänger keine Temp-Datei angelegt, sondern nur ein TMemorystream. Der wird nicht zurückgesetzt.

(Ich änder gleich oben ab.)

PS: Danke fürs Testen
:thumb:

ghost007 18. Nov 2007 19:43

Re: Komponente für LAN-Verbindungen
 
Hi,
eine frage hätte ich noch, kann man das ganze auch über s inet nutzen ?

MfG - Ghost007

P.S.: Find die kompo egtl recht praktisch, bin grad dabei mich einzuarbeiten ;)

sirius 19. Nov 2007 08:02

Re: Komponente für LAN-Verbindungen
 
Zitat:

Hi,
eine frage hätte ich noch, kann man das ganze auch über s inet nutzen ?
Nein. Die einzelnen Clients finden sich ja über UDP-Broadcast. Das heisst, ich schicke eine Message (je nach Einstellung einmal oder in regelmäßigen Intervallen) an alle Rechner an einen bestimmten Port. Und dann reagiert halt jede andere Komponente, die auf demselben UDP-Port lauscht.
Broadcast heisst allerdings nur, dass ein Router, wenn er will, die Nachricht einfach in jede Richtung weiter schickt (sogar zum Ausgangsrechner zurück). "Wollen" tut default-mäßig jeder Router, den man sich zu Hause so hinstellt. Aber diese Aktion macht kein Router im Internet. Das bedeutet, spätestens beim ISP ist Schluss mit Broadcast. Wäre auch eine ziemliche Überlastung des Netzes, wenn alle Broadcast-Messages über die ganze Welt laufen würden.
Letztenendes heisst ja Broadcast nur als Zieladresse 255.255.255.255 zu nehmen, und jenachdem der Router macht es, oder er macht es nicht.
Fürs Internet bräuchte man dann irgendwo wieder einen Server, bei dem sich alle Clients anmelden.

Zitat:

Find die kompo egtl recht praktisch, bin grad dabei mich einzuarbeiten
Mal schauen, wann ich Zeit habe mal etwas zu den einzelnen Einstellungen zu schreiben (bis jetzt musst du dich an die Kommentare im Quellcode halten)
Wenn du häufig große Dateien (bzw. Streams) versenden willst, lohnt es sich, die Kompo in ein Thread reinzulegen.

ghost007 19. Nov 2007 12:43

Re: Komponente für LAN-Verbindungen
 
Hi,
ja das mit dem broadcast hatte ich vergessen, wegen der internet fähigkeit de kompo.

Wie du schon sagst, wenn du mal zeit hast, wäre ne dokumentation hilfreich ;)

MfG - Ghost007


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:26 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