Отключение 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;

Помогите, пожалуйста.

0 ответов

Другие вопросы по тегам