Entwickler-Ecke
Internet / Netzwerk - Traffic-Beschränkung im LAN
UGrohne - Di 17.12.02 17:34
Titel: Traffic-Beschränkung im LAN
Hallo,
gibt es eine Möglichkeit die Bandbreite für irgendeine Verbindung (vorz. LAN) auf einen bestimmten Wert zu beschränken.
Mein Problem ist, dass ich meine DB-Anwendung auf Internet-Tauglichkeit testen will, aber im LAN ist das halt etwas schnell. Gibts da ne Einstellung oder ein Programm oder auch ne Delphi-Bibliothek dafür?
Danke im Voraus
Ex0rzist - Do 19.12.02 15:13
Hallo,
wie baust du denn eine Verbindung auf?
Du müsstest dann manuell die Anzahl der Datenpakete beschränken, die pro Sekunde gesendet werden. Damit könnte man dann verschiedene Bandbreiten simulieren.
UGrohne - Do 19.12.02 15:21
Hmm, ich bau selbst gar keine Verbindung auf, das geht über die IBX-Kompos. Oder meinst Du meine Netzwerk-Verbindung? DIe bau ich au net selber auf *g*.
Ich frag mich halt, obs für die Beschränkung ein Programm gibt, oder ob es Kompos gibt, sodass ich das selbst bauen könnte. Ich will mir für diese Simulation keinen 1000€-Switch kaufen, mit dem das geht.
Im Moment mess ich den Datentransfer erstmal mit LANview, aber ich würde gerne noch einen richtigen objektiven Eindruck gewinnen.
Ex0rzist - Do 19.12.02 15:26
Die IBX-Kompos kenne ich leider nicht. Sind das spezielle Datenbankkompos?
Mit Verbindung aufbauen meinte ich mehr ServerSockets oder Indy etc.
Wenn du diese nicht benutzt, dann weiß ich leider auch nicht weiter. :?
UGrohne - Do 19.12.02 16:06
das sind die Kompos für die DB-Verbindung zu Interbase.
Ne, es geht um eine bestehende Netzwerkverbindung, die ich beschränken will, es muss kein einzelner Port sein, es kann die gesamte Verbindung drunter "leiden"
Ex0rzist - Do 19.12.02 16:20
Sorry, da kann ich dir leider nicht weiterhelfen.
Von so etwas habe ich auch noch nie gehört. Oder gibt es Programme, die eine komplette Verbindung beschränken können? :?
Ich denke der Schlüssel zu deinem Problem liegt in den IBX-Kompos. Aber ich kenne sie leider überhaupt nicht. :cry:
lightning_in_the_dark - Do 19.12.02 19:51
Hi Leuts
Naja. Sowas dürfte nicht alzu schwer sein (denke ich jedenfalls :wink: ). Man unterteile seine Daten einfach in gleich grosse Stücke, die der Anzahl maximalen Bytes, die in einer Sekunde übertragen werden sollen, entsprechen und schickst jede sekunde eines dieser Stücke.
Kompliziert wird es erst, wenn dein Netzwerk in einer gewissen Zeit so ausgelastet ist, dass selbst mit Begrenzung nicht alles durchmag. Daher würde ich eine Bestätigung einbauen, damit man den Cache nicht überfüllt.
MfG
D_cOdEr
UGrohne - Do 19.12.02 20:20
Sagt mal, spinn ich oder entsteht hier gerade die Idee zu einem eigenen Tool? Hab irgendwie das Gefühl. Also eigentlich war ja nur die Frage, obs sowas schon gibt, um eben verschiedene Verbindungsgeschwindigkeiten zu simulieren, aber anscheinend ja nicht.
Vielleicht werde ich mich mal näher damit befassen. Wäre aber geschickt, wenn mir noch ein paar Leute vll. noch ien paar Anregungen und Tipps geben könnte, weil mit sowas hatte ich bisher noch überhaupt nicht zu tun.
Gruß
BungeeBug - Do 19.12.02 20:39
na kein problem ... komm mal in den chat dann sag ich dir noch nen paar schachen :P bin auch bereit dir nach besten kräften zu helfen ... musst nur sagen was wie und wo ... -> cya @ chat :P
BungeeBug
UGrohne - Do 19.12.02 22:31
Sorry, habs zu spät gelesen, jetzt is ja keiner mehr da *seufz*
Stefan0309 - Fr 20.12.02 07:42
uiiii.....is das schon spät....hab mir trotzdem mal eben was durch den kopf gehen lassen...
ich bin nun von der komponente TClientSocket ausgegangen, aber läst sich bestimmt auch auf andere komponenten anwenden, der datenverkehr wird komplett von einem TTimer gehandhabt
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29:
| globale variablen -------------------- PacketSize: Cardinal; // bytes die in einem packet gesendet werden sollen Speed: Cardinal; // wieviele bytes pro sekunde gesendet werden Stream: TMemoryStream; // enthält die komplette quelle z.B. eine Datei BytesSend: Cardinal; // bytes die schon gesendet wurden
Timer.Interval := 1000 * PacketSize div Speed; // sollte wohl klar sein :)
procedure OnTimer; var Buffer: array of Byte; // das zu sende Packet Idx: Cardinal; // zähler für eine schleife begin { Packetgröße festlegen } SetLength(Buffer, PacketSize); { Packetgröße für das letzte Packet festlegen } if Stream.Size - BytesSend < PacketSize then SetLength(Buffer, Stream.Size - BytesSend); { packet aus der quelle "laden", geht bestimmt auch eleganter } for Idx := 0 to High(Buffer) do begin Stream.Read(Buffer[Idx], 1); end; { packet senden...in diesem beispiel ist es der socket von TClientSocket} Socket.SendBuf(Buffer[0], Length(Buffer)); { die anzahl der gesendeten bytes um die größe des gesendeten packets erhöhen} Inc(BytesSend, Length(Buffer)); { timer stoppen sobald komplette quelle übertragen ist } if BytesSend = Stream.Size then Timer.Enabled := False; end; |
hoffe die kommentare sind ausreichend, hab immer das problem das ich mich sehr schwer damit tue, etwas zu erklären, fals noch fragen sind einfach melden... so, jetzt geh ich erstmal ins bett :D
UGrohne - Fr 20.12.02 09:44
Danke mal, dass Du Dir so früh noch die Mühe machst.
Häää??? Du gehst jetzt ins Bett, na dann gute N8, da steh ich immer auf *g*.
Ich weiß nicht, ob ich jetzt noch dazu komm, das zu testen, weil ich heute Mittag übers Wochenende an keinen PC komm :-(, naja, wenigstens ein par Tage Urlaub
Gruß
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!