Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Mehrere IP-Adressen auf einem Rechner -für Simulationszwecke (https://www.delphipraxis.net/94849-mehrere-ip-adressen-auf-einem-rechner-fuer-simulationszwecke.html)

Whookie 27. Jun 2007 07:33


Mehrere IP-Adressen auf einem Rechner -für Simulationszwecke
 
Ich bin gerade dabei, eine Simulation zu planen, die in der Lage sein sollte eine beliebige Anzahl von "externen" Geräten zu simulieren. Im Realfall hat jedes Gerät natürlich eine eigene IP-Adresse und lauscht auf einem fix reservierten Port. Um die Geräteentwicklung von der Entwicklung der PC-Applikation(en) zu trennen (in der Regel sind auch nie genügend physikalische Geräte vorhanden) soll es ein Programm geben, das auf einem PC läuft und eine beliebige Anzahl von pyhsikalischen Geräten simulieren kann (natürlich jedes mit eigener IP, alle am selben Port ...).
Auf den Geräten wird ausschließlich UDP verwendet und die Simulation sollte in Delphi mit den Indy10 Komponenten geschrieben werden.

Nun habe ich aber das Problem, das ich keine Ahnung habe, wie ich auf einem Rechner eine beliebige Anzahl von IP-Adressen simulieren kann?

TIA
Whookie

SirThornberry 27. Jun 2007 07:38

Re: Mehrere IP-Adressen auf einem Rechner -für Simulationszw
 
beim tcp/ip-protokoll in den Eigenschaften einer Verbindung kannst du mehrere IP-Adressen angeben.

RavenIV 27. Jun 2007 07:57

Re: Mehrere IP-Adressen auf einem Rechner -für Simulationszw
 
Unter WinXP und vielleicht auch Win2000 kannst Du bei den Netzwerkeinstellungen mehrere IP-Adressen eintragen. Natürlich geht das nicht unendlich.

Evtl. solltest Du Dir auch mal überlegen, mit VM's zu arbeiten. Dann hast Du mehrere PC's auf einem PC.

Whookie 27. Jun 2007 20:40

Re: Mehrere IP-Adressen auf einem Rechner -für Simulationszw
 
Das ganze sollte ziemlich einfach in einem Simulationsprogramm laufen, dort sollten 20 bis 50 Geräte (== IP-Adressen) simuliert werden können. Das ganz könnte dann auf einem eigenen "Simulationsrechner" oder besser noch auf dem Entwicklungsrechner selber laufen, auf dem die Applikation entwickelt wird.

arbu man 27. Jun 2007 21:06

Re: Mehrere IP-Adressen auf einem Rechner -für Simulationszw
 
Wenn es dir nur um IP Adressen geht hast du doch sicher genug. Man denke nur an 127.0.0.1. Damals zu beginn von IP haben die Erfinder gleich das komplette A Netz 127 als Lokal gesetzt. Also hat dein Rechner auch die Adresse 127.8.9.10. Ich denk mal so 16 Mio. Adressen sollten dir reichen.

mfg, Björn

Whookie 8. Jul 2007 21:56

Re: Mehrere IP-Adressen auf einem Rechner -für Simulationszw
 
Ja, ich denke das sollte für meine Zwecke genügen :lol:

Ich habe mich auch schon über einige Experimente her gemacht und bin bereits auf die nächsten Probleme gestoßen...

Ich habe ein Clientprogramm mit einer IdUDPClient-Komponente und einer ComboBox mit folgenden IP-Adressen: 127.8.0.4 und 127.8.0.5. Dazu gibt es 2 Buttons, einer davon verwendet die beiden IP's aus der ComboBox:

Delphi-Quellcode:
procedure TSDIAppForm.SendBtnClick(Sender: TObject);
begin
  IdUDPClient1.Active := TRUE;
  IdUDPClient1.Send(SendIPCB.Items[SendIPCB.ItemIndex], 3333, Format('Sending to %s <Hallo Welt!>', [SendIPCB.Items[SendIPCB.ItemIndex]]));
end;
Dazu gibt es auch noch einen Broadcast-Button:

Delphi-Quellcode:
procedure TSDIAppForm.BroadCastBtnClick(Sender: TObject);
begin
  IdUDPClient1.Active := TRUE;
  IdUDPClient1.BroadcastEnabled := TRUE;
  IdUDPClient1.Broadcast('Broadcasting to all <Hallo Welt>!', 3333);
end;
Bewusst momentan nicht drin ist das warten auf eine Antwort....

Dann gibt es eine Serverapplikation die momentan 2 IdUDPServer-Komponenten enthält. Beide wurden wie folgt initialisiert (im Designer):
Delphi-Quellcode:
Active := TRUE;
BroadcastEnabled := TRUE;
DefaultPort:=3333;

Bindings := 127.8.0.4:3333  (IdUDPServer1)
Bindings := 127.8.0.5:3333  (IdUDPServer2)
Der Rest bleibt auf Defaultwerten. Das OnUDPRead-Ereignis beider Komponenten ist mit folgender Methode verbunden:

Delphi-Quellcode:
procedure TSDIAppForm.UDPServer_Read(Sender: TObject; AData: TBytes; ABinding: TIdSocketHandle);
Var
  s: TIdBytes;
begin
  dbPrint('OnRead: %s("%s")', [TComponent(Sender).Name, BytesToString(AData)]);
  dbPrint('       IP:    %s (Port:    %d)', [ABinding.IP, ABinding.Port]);
  dbPrint('       PeerIP: %s (PeerPort: %d)', [ABinding.PeerIP, ABinding.PeerPort]);
//  SetLength(s, 3);
//  AppendString(s, '+OK', -1);
//  ABinding.SendTo(ABinding.PeerIP, ABinding.PeerPort, s);
end;
dbPrint gibt dabei Text in ein Memofeld aus.

1. Problem
Verwende ich die Send-Funktion dann wird das UDPServer_Read-Ereignis korrekt ausgelöst. Drücke ich den Broadcast-Button, wird jedoch kein Ereignis ausgelöst.

2. Problem
Nehme ich die Kommentare im UDPServer_Read weg (sende also eine Antwort), bekomme ich die Fehlermeldung:
Socket Error # 10065 - No route to host. Natürlich bekomme ich auch im IdUDPClient ein Timeout, wenn ich dort mit
IdUDPClient1.ReceiveString; eine Antwort zu empfangen versuche ...

3. frage ich mich, ob das überhaupt klappen kann, wenn ein Broadcast antworten von mehreren Quellen bringt, ich aber nur auf dieses eine ReceiveString warte ...?

Vielleicht gibts ja jemand der da einwenig Licht in die ganze Sache bringen kann ...

TIA
Whookie

WS1976 9. Jul 2007 08:42

Re: Mehrere IP-Adressen auf einem Rechner -für Simulationszw
 
Hallo,

WinXP: genau 2 IP Adressen kannst du da eingeben, eine originäre und eine alternative.
Alles andere ist fundiertes Halbwissen!

Grüsse
Rainer

Steve 9. Jul 2007 09:37

Re: Mehrere IP-Adressen auf einem Rechner -für Simulationszw
 
<Eigenschaften der Netzwerkverbindung> - Eigenschaften von Internetprotokoll (TCP/IP) - <DHCP deaktivieren> - Erweitert - IP-Adressen - Hinzufügen
Auszug aus der Hilfe dieses Dialogs:
Listet zusätzliche IP-Adressen und Subnetzmasken auf, die dieser Netzwerkverbindung zugewiesen werden können. Sie können beliebig viele IP-Adressen konfigurieren. [...]


Hm. Klingt fast wie gewollt.

Gruß
Stephan

Whookie 9. Jul 2007 16:16

Re: Mehrere IP-Adressen auf einem Rechner -für Simulationszw
 
:( damit hab ich leider kein Glück ... XP meint bei der Eingabe einer 127.er IP:

IP-Adressen, die mit 127 beginnen, sind unzulässig, weil sie für Loopbackadressen reserviert sind. Geben sie einen anderen Wert zwischen 1 und 223 ein.

Mal abgesehen davon, dass das ein ziemlicher Konfigurationsaufwand wäre ... bei jedem Rechner 50 IP-Adressen einzugeben damit die Simulation läuft ...

Ausserdem läuft es ja mit den IdUDPServer(n), wenn man über Bindings eine entsprechende Zuweisung macht (zumindestens der Empfang) ... vielleicht krieg ich da ja doch noch irgendwie die Kurve?

DGL-luke 9. Jul 2007 17:01

Re: Mehrere IP-Adressen auf einem Rechner -für Simulationszw
 
Hallo, das ist ne entweder-oder-sache ;-)

1. du bindest deine adapter an loopback-adressen, z.B. 127.0.1.32

2. du bindest deinen Nertzerkadapter an mehrere bestimmte Adressen, z.B. 10.0.0.1,10.0.0.2,10.0.0.3 usw. du kannst deine netzwerkadapter dann auch einzeln an diese adressen binden.

Soweit hab ichs verstanden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:36 Uhr.
Seite 1 von 2  1 2      

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