| Autor |
Beitrag |
Gausi
      
Beiträge: 8554
Erhaltene Danke: 481
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Sa 28.07.07 14:28
Ich experimentier grade noch an was anderem rum. Und zwar möchte ich übers LAN Daten austauschen. Hab also eine Server-Anwendung mit nem IdTCPServer (ich verwende Indy10) und eine Client-Anwendung, wo ein passender IdTCPClient sitzt. Kommunikation funktioniert auch soweit.
Jetzt ist die Frage, wie der Client den Server finden kann (d.h. ohne die IP-Adresse des Servers vom User eingeben zu lassen). Und da finde ich meine Lösung nicht so ganz gut. Ich sende vom Client über einen IdUDPClient einen Broadcast, den auf der Serveranwendung ein IdUDPServer empfängt.
Um dem Clienten das mitzuteilen, benutzt der Server nun einen weiteren IdUDP-Clienten, der die eigene IP an die IP sendet, von der der Broadcast kam. Auf dem Clienten empfängt das dann ein zweiter IdUDPServer.
Ich habe also
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| Client Server ----------------------------------------------- Broadcast UDP-Client ------------------> UDP-Server | sendet Server-IP | UDP-Server <------------------ UDP-Client | | IP speichern | | Anfragen/Antworten TCP-Client <--------------------> TCP-Server | Geht das auch einfacher?
_________________ We are, we were and will not be.
|
|
Chryzler
      
Beiträge: 1097
Erhaltene Danke: 2
|
Verfasst: Sa 28.07.07 14:38
Der Server könnte regelmäßig Broadcasts mit seiner IP verschicken, dann muss der Client nichts anderes als auf einen Broadcast warten. Das wäre die einzige Möglichkeit, denk ich.
|
|
Fighter#1
      
Beiträge: 787
Win XP, Ubuntu 8.04
Turbo Delphi 2006, Delphi 2005 Pe, Delphi 5 Pe, Netbeans 6.1, Eclipse, Microsoft VisualC#, Dev C++, PHP, HTML, CSS
|
Verfasst: Sa 28.07.07 17:18
Also gelöst habe ich das auch so, dass der Server alle 3 Sekunden einen Broadcast mit der IP losschickt!
Das funktioniert wunderbar! 
_________________ Wer andere beherrscht ist stark,
wer sich selbst beherrscht ist mächtig. Lao Tse
|
|
Gausi 
      
Beiträge: 8554
Erhaltene Danke: 481
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Sa 28.07.07 17:25
Dass das funktioniert ist klar, die Idee hatte ich auch zwischendurch, aber müllt man damit nicht das LAN unnötig zu? Natürlich ist der Traffic nicht wirklich groß, aber doch irgendwie unnötig, oder?
(Und funktionieren tut meins auch  )
_________________ We are, we were and will not be.
|
|
Fighter#1
      
Beiträge: 787
Win XP, Ubuntu 8.04
Turbo Delphi 2006, Delphi 2005 Pe, Delphi 5 Pe, Netbeans 6.1, Eclipse, Microsoft VisualC#, Dev C++, PHP, HTML, CSS
|
Verfasst: Sa 28.07.07 17:59
musst halt wissen was dir wichtiger ist xD
entweder haste unnötigen Traffic oder etwas mehr im Quelltext stehn!
Wobei, Narses TUDPSockUtil kannste auch verwenden! sind glaubich nicht so serverbasierend! Also du nimmst eine Komponente, die dann quasi Server und Client ist!
_________________ Wer andere beherrscht ist stark,
wer sich selbst beherrscht ist mächtig. Lao Tse
|
|
UGrohne
      

Beiträge: 5502
Erhaltene Danke: 220
Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
|
Verfasst: Sa 28.07.07 18:06
Der Traffic macht da nicht wirklich was aus. Geh mal ein normales Netzwerk mit nem Sniffer rein, was da so alles an Broadcasts rumschwirrt  Daher würde ich das wohl auch so umsetzen.
|
|
arj
      
Beiträge: 378
Win XP/Vista, Debian, (K)Ubuntu
Delphi 5 Prof, Delphi 7 Prof, C# (#Develop, VS 2005), Java (Eclipse), C++, QT, PHP, Python
|
Verfasst: Sa 28.07.07 18:09
Naja, der Client könnte allerdings doch bei einem Verbindungsversuch über TCP einen Broadcast absenden.
Mit entsprechendem Inhalt natürlich. Dann antwortet der Server dem Client und der Client weiß die Adresse.
Weitere Infos siehe de.wikipedia.org/wiki/Broadcast
|
|
Gausi 
      
Beiträge: 8554
Erhaltene Danke: 481
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Sa 28.07.07 19:15
Nagut, überzeugt. Dann macht einfach der Server den Broadcast.
Aber wenn mein Bruder wieder meckert, dass der Router rauscht, dann seid ihr schuld. 
_________________ We are, we were and will not be.
|
|
Chryzler
      
Beiträge: 1097
Erhaltene Danke: 2
|
Verfasst: Sa 28.07.07 19:24
Du musst ja nicht alle 50ms einen Broadcast senden, imho reichen 5-8 Sekunden.
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Sa 28.07.07 19:48
Ansonsten implementier einfach Dual-Use:
1. In der Server-Anwendung wird in etwas größeren Intervallen (von caa. 15-30 Sekunden) ein Broadcast verschickt, der mitteilt "Ich bin ein Server, redet mit mir!"
2. Der Client darf explizit einen Broadcast senden (wenn er nicht dieses Interval abwarten will) mit dem Inhalt "liebe Server, ich suche euch".
So ähnlich läuft das nämlich bei UPnP ab: Wenn ein UPnP-Fähiges Gerät in einem Netzwerk ist, teilt dieses (in mehr oder weniger regelmäßigen Abständen) dem Netzwerk mit, hier bin ich. Ein Nutzer dieser Dienste kann aber auch explizit fragen "gibt es hier ein Gerät, was Dienst XY anbietet???".
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
|