AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Komponente für LAN-Verbindungen
Thema durchsuchen
Ansicht
Themen-Optionen

Komponente für LAN-Verbindungen

Ein Thema von sirius · begonnen am 17. Nov 2007 · letzter Beitrag vom 19. Nov 2007
Antwort Antwort
Benutzerbild von sirius
sirius
Registriert seit: 3. Jan 2007
(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)
Angehängte Dateien
Dateityp: zip lanconnections_118.zip (20,3 KB, 110x aufgerufen)
Dateityp: zip delphi_lanchat_123.zip (4,8 KB, 94x aufgerufen)
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
 
Benutzerbild von ghost007
ghost007

 
Delphi 7 Personal
 
#2
  Alt 18. Nov 2007, 05:00
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
Christian
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

 
Delphi 7 Enterprise
 
#3
  Alt 18. Nov 2007, 09:01
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)
  Mit Zitat antworten Zitat
Benutzerbild von ghost007
ghost007

 
Delphi 7 Personal
 
#4
  Alt 18. Nov 2007, 10:32
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
Christian
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

 
Delphi 7 Enterprise
 
#5
  Alt 18. Nov 2007, 17:56
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
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)

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
  Mit Zitat antworten Zitat
Benutzerbild von ghost007
ghost007

 
Delphi 7 Personal
 
#6
  Alt 18. Nov 2007, 19:43
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
Christian
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

 
Delphi 7 Enterprise
 
#7
  Alt 19. Nov 2007, 08:02
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.
  Mit Zitat antworten Zitat
Benutzerbild von ghost007
ghost007

 
Delphi 7 Personal
 
#8
  Alt 19. Nov 2007, 12:43
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
Christian
  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 23:01 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