UDP mit LNEt

Alle Fragen zur Netzwerkkommunikation
martinjakobs
Beiträge: 12
Registriert: Mo 22. Mär 2010, 19:42

Re: UDP mit LNEt

Beitrag von martinjakobs »

Das weiß ich doch. Ich hab mir das Demo doch angesehen. Danke nochmal.

Dann will ich einen Multicast machen, falls der "verbindungslos" ist.

Also, jetzt mal ganz konkret: Ich möchte eine Art "Chatprogramm" für unseren Computerraum
schreiben, bei dem Schüler Nachrichten austauschen können. Dieser Nachrichtenaustausch
sind aber nicht Texte, sondern nur eine Lampe (Knopf), bei dessen Druck die Lampe bei allen Schülern
leuchtet. Das Programm simuliert also eine Art Feuer oder Taschenlampe, das / die man über eine
große Entfernung sehen kann, wie eine Art mittelalterliches Signalfeuer. Diese Feuer (das rote Label
im Programm) können aber alle sehen.

So, Ziel der ganzen Geschichte ist es natürlich, dass sich die Kinder eine Art Kommunikationsstruktur
erarbeiten (so etwas wie "Zieladressen" oder "Token" wie im Token-Ring oder Datenkollisionslösungen).

Ok, das Ganze ist dann ein Programm, das im Computerraum läuft und im Info-Unterricht benutzt werden kann.

Das Problem ist aber, dass ich eine Client-Server Struktur verbergen möchte. Das heißt, alle Fachtermini
wie Port oder IP-Adresse sollen im Programm nicht vorhanden (sichtbar) sein, damit Schüler nicht versuchen,
Kommunikationsstrukturen über diese Fachbegriffe abzuwickeln. OK?

Damit brauche ich also ein Programm, das ein Schüler startet, und das einfach ins lokale Computerraumnetz
die Nachricht senden kann "Knopf gedrück" und das ebenfalls alle anderen "Knopf gedrückt" empfangen kann,
ohne dass sich die Clients an einem Sever angemeldet haben und ohne dass eine Zieladresse bekannt ist.

Denn dann -wie erklärt- fällt für Schüler die Situation der Problemlösung: "Wie stelle ich es an, dass derjenige,
für den die Nachricht ist weiß, dass sie für ihn ist."
Und dann erst ist der Schüler beim Port und bei der IP.

So, ich hoffe, ich habe das Problem genau genug umrissen. Für Delphi mit den Indy-Komponenten habe ich das
Programm ja auch schon geschrieben. Nur benutze ich Delphi auch im Unterricht nicht mehr sondern
Lazarus und fände es schön, wenn ich das ganze auch mit Lazarus schreiben könnte und wenn es visuelle
Komponenten für Lazarus gäbe, mit denen die Schüler (die oft meine oder ähnliche Anwendungen nachprogrammieren
möchten) auch zurecht kommen.
Und das ist der Grund, warum ich Synapse nicht benutzen kann. Damit sind die meisten Schüler dann überfordert.

Ok, vielleicht hat ja nun doch noch jemand für mich einen Tipp.

Gruß

Martin

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6776
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: UDP mit LNEt

Beitrag von af0815 »

Schon maldaran gedacht, das Router den Broadcast(Multicast) nicht weiterleiten, wohin auch, es gibt ja keine dezitierten Empfänger (und somit keine Routingtabelle). Somit ist das somit auf das aktuelle Netzwerksegment beschränkt.

Wenn die beigebackten FDemoprogramme nicht funktionieren, dann sollte man auch den Firewall/Antivirus nicht vergessen. Der hat schon viele 'einfache' Programme beim laufen behindert.

Ein wesen der IP-Kommunikation ist es, das es einen Sender und (normalerweise) einen Empfänger gibt. Multicast-Pakete sind eine spezielle Abart um speziell das Verteilen von Streamingcontent zu erleichtern und die Bandbreiten zu verringern.

Bei dem was du machen willst, könnte folgendes helfen (vor allen, nachdem es auf ein Segment beschränkt ist):

Per udp an eine Adresse (In deinem Segment) nach der anderen, ein Paket schicken, kommt eine Antwort, dann sich die Adresse merken und mit dem Partner die Verbindung halten. Ev. können dann Listen ausgetauscht werden von den bekannten IPs und somit neue Partner gefunden werden. Somit kann ich unabhängig von den Adressen, sich relativ schnell alle Kommunikationspartner finden. Und das ganze ohne spezielle Übertragungstechniken.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

martinjakobs
Beiträge: 12
Registriert: Mo 22. Mär 2010, 19:42

Re: UDP mit LNEt

Beitrag von martinjakobs »

Per udp an eine Adresse (In deinem Segment) nach der anderen, ein Paket schicken, kommt eine Antwort, dann sich die Adresse merken und mit dem Partner die Verbindung halten. Ev. können dann Listen ausgetauscht werden von den bekannten IPs und somit neue Partner gefunden werden. Somit kann ich unabhängig von den Adressen, sich relativ schnell alle Kommunikationspartner finden.
Ja, das ist ne gute Idee. Das probier ich mal, müsste -wenn ich so drüber nachdenke- klappen. :wink:
Warum bin ich da noch nicht drauf gekommen?? :roll:

Vielen Dank für die Anregung.

Gruß

Martin

marcov
Beiträge: 1102
Registriert: Di 5. Aug 2008, 09:37
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
CPU-Target: 32/64,PPC(+64), ARM
Wohnort: Eindhoven (Niederlande)

Re: UDP mit LNEt

Beitrag von marcov »

martinjakobs hat geschrieben: So, ich hoffe, ich habe das Problem genau genug umrissen. Für Delphi mit den Indy-Komponenten habe ich das
Programm ja auch schon geschrieben. Nur benutze ich Delphi auch im Unterricht nicht mehr sondern
Lazarus und fände es schön, wenn ich das ganze auch mit Lazarus schreiben könnte und wenn es visuelle
Komponenten für Lazarus gäbe, mit denen die Schüler (die oft meine oder ähnliche Anwendungen nachprogrammieren
möchten) auch zurecht kommen.
Und das ist der Grund, warum ich Synapse nicht benutzen kann. Damit sind die meisten Schüler dann überfordert.
Ich verstehe noch immer nicht was das Problem ist das mit Indy zu tun. Das funktioniert genau so als mit Delphi.

martinjakobs
Beiträge: 12
Registriert: Mo 22. Mär 2010, 19:42

Re: UDP mit LNEt

Beitrag von martinjakobs »

Na ja, ich dachte, es sei klar. Also nochmal:

In Lazarus habe ich die LNet-Komponenten.
Ich benutze die LNet-UDP Komponente.
Ich bin im lokalen Netzwerk, kenne aber die IP-Adressen der anderen Rechner nicht.
Ich möchte eine Nachricht an alle anderen Rechner schicken, die alle anderen Rechner bekommen.

UDP.send(...) oder UDP.sendMessage(...) funktionieren nicht, da ich dafür die IPs
der anderen Rechner kennen muss.

Bei den Indy-Komponenten lautet dieser Befehl: UDP.Broadcast(...)

Hm .. wie mache ich das nun mit der LNet-UDP-Komponente, ohne großen Aufwand,
dass alle anderen Rechner meine Nachricht bekommen?
Es geht nicht ohne großen Aufwand.

Nenne mir als Gegenbeweis bitte den genauen Befehl mit der UDP-LNet-Komponente, und ich verneige
mich im Angesicht meines Bildschirms vor dir.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6776
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: UDP mit LNEt

Beitrag von af0815 »

An und für sich gibt es für jedes Netz eine eigene Broadcastadresse. zB. Netz 192.168.0.0/255.255.255.0 (oder auch 192.168.0.0/24) ist es 192.168.0.255. Nur wenn man es senden kann, so muß man es nicht einfach empfangen können :-)

Eine einfache Suche bei Google unter define: Broadcast address ist auch recht informativ
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Antworten