AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Netzwerk Benchmark

Ein Thema von Patrick · begonnen am 28. Feb 2006 · letzter Beitrag vom 28. Feb 2006
Antwort Antwort
Patrick

Registriert seit: 15. Sep 2003
184 Beiträge
 
Delphi 2010 Professional
 
#1

Netzwerk Benchmark

  Alt 28. Feb 2006, 09:43
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:
SetLength(sentvar,1024);
size:=SizeOf(sentvar); //size=4
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ß?

Mein zweites Problem: Ich jage die eher die Prozessorauslastung hoch, anstatt der Netzwekrauslastung.
Delphi-Quellcode:

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;
Ausserdem habe ich nicht das Gefühl, dass alles an Bytes am Zeil ankommt...
Genieße jede Minute deines Lebens, denn sie wird nicht wieder kommen.
  Mit Zitat antworten Zitat
Gruber_Hans_12345

Registriert seit: 14. Aug 2004
1.426 Beiträge
 
Delphi 2007 Professional
 
#2

Re: Netzwerk Benchmark

  Alt 28. Feb 2006, 09:49
du mußt length für einen String verwenden.

und ich glaube es müsste so sein
    Clientsocket1.Socket.SendBuf(@sentvar[1], length(sentvar));
Gruss Hans

2B or not 2B, that is FF
  Mit Zitat antworten Zitat
Basilikum

Registriert seit: 9. Aug 2003
389 Beiträge
 
Delphi 7 Professional
 
#3

Re: Netzwerk Benchmark

  Alt 28. Feb 2006, 09:49
Zitat von Patrick:
Delphi-Quellcode:
SetLength(sentvar,1024);
size:=SizeOf(sentvar); //size=4
ein String ist im Prinzip ein Pointer, und ein Pointer ist auf 32-bit-System nun mal 4 Byte gross...

verwende bei Strings zur Längenbestimmung Length()

Zitat von Patrick:
Clientsocket1.Socket.SendBuf(sentvar,SizeOf(size));
das selbe Problem... du versendest nur die Adresse des Strings... und zwar 4 Byte, da ein Integer (sizeof(integer)) 4 Byte lang ist

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;
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#4

Re: Netzwerk Benchmark

  Alt 28. Feb 2006, 10:05
Zitat von Patrick:
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.
Dann verwende doch den Port 7 (=Echo). Du sparst dir damit in den meisten Fällen das Server-Programm.
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.
Andreas
  Mit Zitat antworten Zitat
Patrick

Registriert seit: 15. Sep 2003
184 Beiträge
 
Delphi 2010 Professional
 
#5

Re: Netzwerk Benchmark

  Alt 28. Feb 2006, 11:00
@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;
Genieße jede Minute deines Lebens, denn sie wird nicht wieder kommen.
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.755 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: Netzwerk Benchmark

  Alt 28. Feb 2006, 11:16
... schon mal mit Ethereal geschaut, wie deine Packete aussehen und
in welchen Abstand sie gesendet werden?

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:06 Uhr.
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