Hallo Uwe,
vielen Dank für Deine schnelle und kompetente Antwort. Mit Deiner Version lässt es sich einwandfrei kompilieren ... zum Testen der Funktion muss ich noch einen Aufbau der Umgebung machen.
Die anderen Funktionen habe ich nicht absichtlich entfernt, ich wollte den Beitrag nur nicht durch ellenlangen Code überladen.
Hier wird FReadBuffer meiner Meinung nach beschrieben:
Code:
RC:= recv(Socket, FReadBuffer, SizeOf(TReadBuffer), 0);
... oder hier passiert auch was damit:
Code:
function TCustomWSocket.SocketReadV2(Socket: TSocket; Flag: integer): String;
var
Received, tRecvcount: longint;
i: integer;
tmpStr : String;
tmpFReadBuffer: TReadBuffer;
begin
Result:= '';
tRecvcount:=0;
Received:=0;
//Received:= recv(Socket, FReadBuffer, SizeOf(TReadBuffer), Flag);
repeat
begin
tRecvcount := recv(Socket, tmpFReadBuffer, SizeOf(TReadBuffer), Flag);
for i := 1 to tRecvcount do
FReadBuffer[Received + i] := tmpFReadBuffer[i];
Received := tRecvcount + Received;
end;
until (tRecvcount <> SOCKET_ERROR);
if Received = SOCKET_ERROR then
begin
if WSAGetLastError <> WSAEWOULDBLOCK then
SocketError(WSAGetLastError);
end
else
if Received>0 then begin //05.11.10: Fix bei .SocketRead: bei Länge 0 gab es RangeError beim Zugriff auf Result[1]
SetLength(Result, Received);
//Result := TEncoding.Default.GetString(FReadBuffer);
tmpStr := StringOfChar('-', Length(FReadBuffer));
for i := 1 to Received do
tmpStr[i] := Char(FReadBuffer[i]);
//for i := 1 to $ff do
// testBuf[i] := i;
//for i := i to $ff do
// testStr[i] := Char(testBuf[i]);
Result := tmpStr;
SetLength(Result, Received);
//Move(FReadBuffer, &Result[1], Received);
end;
end;
Welchen Sinn macht es denn, das Array als statisches Array zu definieren? Würde das nicht auch funktionieren, wenn es ein dynamisches Array wäre? Nur um den Gedanken des Programmierers zu verstehen ...