Отключение ClientSocket при отправке SendBuf на ServerSocket
Спокойной ночи, я пытаюсь решить проблему. если я пытаюсь отправить buf на serversocket, я отключаюсь через несколько секунд после начала отправки. на сокете сервера я вижу, что получаю немного и после этого я отключен от сокета сервера.
Я использую сокет клиент / сервер как ctNonBlocking и через Интернет (числовой) IP.
моя функция отправки на стороне клиента:
var
Png : TPngImage;
ms : TMemoryStream;
Desktop : HDC;
Tam : Int64;
begin
Result := TBitmap.Create;
Desktop := GetDC(0);
try
try
Result.PixelFormat := pf4bit;
Result.Width := Screen.Width;
Result.Height := Screen.Height;
BitBlt(Result.Canvas.Handle, 0, 0, Result.Width, Result.Height, Desktop, 0, 0, SRCCOPY);
Result.Modified := True;
finally
ReleaseDC(0, Desktop);
end;
except
Result.Free;
Result := nil;
end;
ms := TMemoryStream.Create;
Result.SaveToStream(ms);
ms.Position := 0;
Tam := ms.Size;
//send size to server
Form1.Cliente.Socket.SendText(Format('size@%d#', [Tam]));
Sleep(1000);
//send buf
Form1.Cliente.Socket.SendBuf(ms.Memory^, ms.Size);
ms.Free;
На стороне сервера я использую следующий код для получения снимка экрана:
var
s : String;
ss : UnicodeString;
rr : TArray<string>;
Info : TShellExecuteInfo;
MyFilename : string;
ClientData : ^TClientData;
Buffer : array [0..9999] of Char;
RecievedLen : integer;
begin
ClientData := Socket.Data;
if ClientData.ScreenShot then begin
if ClientData.Arquivo = nil then begin
ClientData.Arquivo := TMemoryStream.Create;
ClientData.NomeArquivo := Format('%sScreenShots\ScreenShot_%d_%s.png', [ExtractFilePath(ParamStr(0)), GetTickCount, ClientData.HWID]);
end;
RecievedLen := socket.ReceiveBuf(Buffer, Sizeof(Buffer));
ClientData.Arquivo.Write(Buffer, RecievedLen);
if ClientData.Arquivo.Size >= ClientData.TamanhoArquivo then ClientData.Arquivo.SaveToFile(ClientData.NomeArquivo);
end;
Помогите, пожалуйста.