I have a client/server application written in delphiXe2 using Indy TIdTCPServer and TIdTCPClient that communicates with each other on the same computer using TCP address 127.0.0.1
When i use about 1 megs per second(8 Megabit) of data everything works fine.
However when set my data at higher speed like 20megs/sec (160 Megabit), it slow down and start to behave weirdly.
Is that an usual behavior for that speed? Also i can't seem to find any benchmark or information of what is the maximum data transfer speed between 2 local application.
Regards
On Ethernet local area networks, data transfer can be as fast as 10 megabits per second. Network switches are planned that will transfer data in the terabit range. In earlier telecommunication systems, data transfer was sometimes measured in characters or blocks (of a certain size) per second.
For example, if a transmission system like the telephone network has 3000 Hz of bandwidth, then the maximum data rate = 2 × 3000 log2 2 = 6000 bits/sec (bps). where S is the signal power and N is the noise power.
Typically, there are 8 bits in one Byte. For example, if we have a dial-up Internet connection with a typical modem of 56 kb/s, the maximum transfer rate will be around 6 to 7 kB/s, as the best, and around 3 kB/s as the worst case scenario.
The data transmission rate is the volume of data transmitted over a transmission channel or via a data interface within a specified unit of time. The units used for this are baud or bits/s.
Perform a bandwidth test. This is what I use (I have attached the relevant server and client code). FWIW, I get around 500Mbps maximum, although there is no way I could process data that fast.
procedure TForm1.IdTCPServer1Execute(AContext: TIdContext);
var
lData: TByteDynArray;
lCaption: string;
lMbps: Real;
lLen: Integer;
begin
AContext.Connection.IoHandler.CheckForDataOnSource;
SetLength(lData, 0);
AContext.Connection.IoHandler.InputBuffer.ExtractToBytes(TIdBytes(lData),
AContext.Connection.IoHandler.InputBuffer.Size);
lLen := Length(lData);
if lLen > 0 then begin
if FStartTime = 0 then begin
Memo1.Lines.Add(FormatDateTime('dd/mm/yyyy hh:nn:ss.zzz', CsiNow) +': Started test');
FStartTime := CsiNow;
end;
Inc(FBytesReceived, lLen);
lCaption := 'MBits Received: ' + CsiPadFloat(FBytesReceived * 1.0 / 125000, 3, 1);
if lCaption <> FLastCaption then begin
Label1.Caption := lCaption;
FLastCaption := lCaption;
end;
if FBytesReceived >= 12500000 then begin
FStopTime := CsiNow;
lMbps := 100000 / MilliSecondsBetween(FStopTime, FStartTime);
Memo1.Lines.Add(FormatDateTime('dd/mm/yyyy hh:nn:ss.zzz', CsiNow) +
': Finished test (' + CsiPadFloat(lMbps, 3, 1) + ' Mbps)');
FBytesReceived := 0;
FStartTime := 0;
end
end;
CsiSleep(0);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
lData: TByteDynArray;
lIndex: Integer;
begin
IdTCPClient1.Host := Edit1.Text;
IdTCPClient1.Connect;
try
SetLength(lData, 125000);
for lIndex := 1 to 125000 do
lData[lIndex - 1] := Ord('a');
for lIndex := 1 to 100 do
IdTCPClient1.IoHandler.Write(TIdBytes(lData));
finally
IdTCPClient1.Disconnect;
end;
end;
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With