![]() |
Netzwerk Benchmark
Hallo,
Ich habe vor ein Netzwerk-Benchmark Programm zu schreiben. Ich benutze dafür den Server- und Client-Socket. Ich habe mir gedacht, dass ich eine Variable anlege, un diese immer wieder sende. Jetzt meine erste Frage: Die Variable sollte von der Größe her variabel sein, also wollte ich einen String (sentvar) nehmen:
Delphi-Quellcode:
Bin ich jetzt doof, oder warum ist ein String mit der Länge 1024, der eine Zeichenkette ist, bei dem ein Zeichen 1 Byte hat, nur 4 Byte groß?
SetLength(sentvar,1024);
size:=SizeOf(sentvar); //size=4 Mein zweites Problem: Ich jage die eher die Prozessorauslastung hoch, anstatt der Netzwekrauslastung.
Delphi-Quellcode:
Ausserdem habe ich nicht das Gefühl, dass alles an Bytes am Zeil ankommt...var sentvar : array [1..1024] of char; //damit ist sentvar 1024 Bytes groß! ist der Array dynamisch ist er wieder nur 4 Byte groß! procedure TForm1.Button3Click(Sender: TObject); var Socket: TCustomWinSocket; i,j : integer; size : integer; begin //SetLength(sentvar,1024); size:=SizeOf(sentvar); if ClientSocket1.active=true then begin for i:=1 to 1048576 do begin Clientsocket1.Socket.SendBuf(sentvar,size); end; end; end; procedure TForm1.Read(Sender: TObject; Socket: TCustomWinSocket); begin bytes:=bytes+Socket.ReceiveLength; Socket.ReceiveBuf(sentvar,Socket.ReceiveLength); Label5.Caption:=InttoStr(bytes); end; |
Re: Netzwerk Benchmark
du mußt length für einen String verwenden.
und ich glaube es müsste so sein
Delphi-Quellcode:
Clientsocket1.Socket.SendBuf(@sentvar[1], length(sentvar));
|
Re: Netzwerk Benchmark
Zitat:
verwende bei Strings zur Längenbestimmung Length() Zitat:
Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
var Socket: TCustomWinSocket; i,j : integer; size : integer; begin SetLength(sentvar,1024); size:=Length(sentvar); if ClientSocket1.active=true then begin for i:=1 to 1048576 do begin Clientsocket1.Socket.SendBuf(sentvar[1],size); end; end; end; |
Re: Netzwerk Benchmark
Zitat:
Normalerweise antwortet jeder Windows-Server und jeder Unix-Rechner auf dem Port 7 (sowohl TCP als auch UDP). Und falls nicht, lässt sich dies nachkonfigurieren. Der Echo-Port lässt sich dazu benützen, um den Netzwerkdurchsatz zu messen. Der Durchsatz hängt natürlich auch von der Paketgrösse ab. Kleine Pakete verursachen mehr Overhead. Ich habe hier übrigens ein fertiges Programm in der Schublade. |
Re: Netzwerk Benchmark
@Shmia: Ich möchte das aber komplett programmieren. Wo bliebe denn da der Lerneffekt? ;-)
Also irgendwie kriegt mein Programm den Arsch nicht hoch: Dümpelt im Besten fall bei 10% Netzwekauslastung einer 54 MBit/s Netzwerkkarte rum. Und die Packetgröße beträgt gerade mal 1460 Byte... Wie krige ich das ganze noch besser hin? Ans Maximum? Komischerweise sind die Packete immer 1460 Byte groß. Dabei müssten sie doch verschieden groß sein, da er den 1048576 Byte großen "sentvar" zerlegt. Komischerweise hatte ich einmal eine Konstante Packetgröße von etwa 960 Byte... Mein Code:
Delphi-Quellcode:
var sentvar : string;
bytes, zahler : int64; procedure TForm1.Button3Click(Sender: TObject); var Socket: TCustomWinSocket; i,j : integer; size : integer; begin SetLength(sentvar,1048576); size:=length(sentvar); if ClientSocket1.active then begin for i:=1 to 100 do begin Clientsocket1.Socket.SendBuf(sentvar[1],size); end; end; end; procedure TForm1.Read(Sender: TObject; Socket: TCustomWinSocket); var size : integer; begin size:=Socket.ReceiveLength; SetLength(sentvar,size); Socket.ReceiveBuf(sentvar[1],size); zahler:=zahler+1; Label7.Caption:=InttoStr(zahler); bytes:=bytes+size; Label6.Caption:=InttoStr(size); Label5.Caption:=InttoStr(bytes); if zahler<100000 then Socket.SendBuf(sentvar[1],size); end; |
Re: Netzwerk Benchmark
... schon mal mit Ethereal geschaut, wie deine Packete aussehen und
in welchen Abstand sie gesendet werden? Grüße Klaus |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:27 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz