我正在做一個UDP C/S。我遇到了服務器每秒可以接收的數據數量問題。Delphi中的UDP服務器和客戶端
我已經測試了10,100,1000個數據消息批量發送到服務器,10,100沒有問題收到。發送1000時,只收到300〜400個。所有測試均在本地完成。
我已經嘗試過使用ICS的twsocket和Synapse的tudpblocksocket來實現服務器。兩者都出現在上面的同樣的問題。
能否向我解釋爲什麼會發生這種情況,以及如何提高服務器性能。使用TUDPBlockSocket
代碼...
while not Terminated do
begin
try
sz := FUDPServer.WaitingData;
if sz > 0 then
begin
FUDPServer.RecvBuffer(mem.Memory, sz);
mem.Seek(0, 0);
AMessage := fFormats.ReadFromStream(mem);
DoMessageReceived(FUDPServer.RemoteSin.sin_addr, AMessage);
end;
finally
end;
end;
...
使用代碼ICS
...
procedure TShapeServer.WSocketDataAvailable(Sender: TObject; ErrCode: Word);
...
begin
SrcLen := SizeOf(Src);
stream := TMemoryStream.Create;
stream.SetSize(INT_BUFFER_SIZE);
Inc(fMessageReceived);
try
Len := FUDPServer.ReceiveFrom(stream.Memory, stream.size, Src, SrcLen);
if (FSenderAddr.S_addr = INADDR_ANY) or
(FSenderAddr.S_addr = Src.Sin_addr.S_addr) then
begin
while stream.Position < Len do
begin
try
AMessage := fFormats.ReadFromStream(stream);
DoMessageReceived(Src.Sin_addr, AMessage);
except
break;
end;
end;
end;
finally
stream.Free;
end;
end;
...
你可以使用wireshark記錄環回udp流量(在Windows上它與winpcap一起工作)? – 2010-12-05 15:58:45
我還會研究微軟每秒數據包的「安全」限制。 IIRC,tcpip.sys報告封蓋行動事件日誌 – 2010-12-05 16:16:52
我試着wireshark。不知道是否做錯了,但有迴環適配器供我選擇。 :(偉大的工具壽 – Darkerstar 2010-12-06 14:31:40