• Что бы вступить в ряды "Принятый кодер" Вам нужно:
    Написать 10 полезных сообщений или тем и Получить 10 симпатий.
    Для того кто не хочет терять время,может пожертвовать средства для поддержки сервеса, и вступить в ряды VIP на месяц, дополнительная информация в лс.

  • Пользаватели которые будут спамить, уходят в бан без предупреждения. Спам сообщения определяется администрацией и модератором.

  • Гость, Что бы Вы хотели увидеть на нашем Форуме? Изложить свои идеи и пожелания по улучшению форума Вы можете поделиться с нами здесь. ----> Перейдите сюда
  • Все пользователи не прошедшие проверку электронной почты будут заблокированы. Все вопросы с разблокировкой обращайтесь по адресу электронной почте : info@guardianelinks.com . Не пришло сообщение о проверке или о сбросе также сообщите нам.

Помощь в коде Передача переменных по ServerSocket и ClientSocket

OkSeD1

Принятый Кодер
Регистрация
21 Апр 2020
Сообщения
7
Баллы
28
Добрый день. Не могу разобраться с передачей переменных по компонентам ServerSocket и ClientSocket в языке программирования Delphi. А именно, не могу передать пакеты с тестовыми переменными, что бы их можно было использовать в последующих командах на сервере. Буду очень благодарен за пояснения.
P.S делаю диплом. Очень срочно надо.
 
Пытался через буфер сделать, через Buf... Но получилось сделать только передачу чисел, Но мне надо сделать передачу текста + цифр
 
Пытался через буфер сделать, через Buf... Но получилось сделать только передачу чисел, Но мне надо сделать передачу текста + цифр
Вот смотри пример который отправляет файл, замени на текст.
Отправитель
Код:
var
F: File of byte;
NumRead: Integer;
Buffer: array [1..8196] of Char;
begin
AssignFile(F, 'C:\File.exe');
Reset(F);
ClientSocket1.Socket.SendText('SIZE!' + IntToStr(FileSize(F)));
ProgressBar1.Max := FileSize(F);
ProgressBar1.Position := 0;
Sleep(200);
repeat
  BlockRead(F,Buffer, SizeOf(Buffer), NumRead);
  Clientsocket1.Socket.SendBuf(Buffer, SizeOf(Buffer));
  ProgressBar1.Position := ProgressBar1.Position + SizeOf(Buffer);
  Sleep(30);
until (NumRead = 0);
CloseFile(F);
Получатель
Код:
var
ReceivingFile : Boolean;
Len : Integer;
FStream: TFileStream;
 
 
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
var
  iLen: Integer;
  Bfr: Pointer;
  Text : string;
begin
  if not ReceivingFile then
  begin
    Text := Socket.ReceiveText;
    if Copy(Text, 1, 5) = 'SIZE!' then
    begin
      Delete(Text, 1, 5);
      Len := StrToInt(Text);
      ProgressBar1.Max := StrToInt(Text);
      FStream := TFileStream.Create('C:\ReceivedFile.exe', fmCreate or fmShareDenyWrite);
      ReceivingFile := True;
    end;
  end
  else
  begin
    iLen := Socket.ReceiveLength;
    GetMem(Bfr, iLen);
    try
      Socket.ReceiveBuf(Bfr^, iLen);
      FStream.Write(Bfr^, iLen);
      Progressbar1.Position := ProgressBar1.Position + iLen;
    finally
       FreeMem(Bfr);
       if Assigned(FStream) and (FStream.Size = Len) then
       begin
         FStream.Free;
         FStream := nil;
         ReceivingFile := False;
       end;
    end;
  end;
end;
 
Вот смотри пример который отправляет файл, замени на текст.
Отправитель
Код:
var
F: File of byte;
NumRead: Integer;
Buffer: array [1..8196] of Char;
begin
AssignFile(F, 'C:\File.exe');
Reset(F);
ClientSocket1.Socket.SendText('SIZE!' + IntToStr(FileSize(F)));
ProgressBar1.Max := FileSize(F);
ProgressBar1.Position := 0;
Sleep(200);
repeat
  BlockRead(F,Buffer, SizeOf(Buffer), NumRead);
  Clientsocket1.Socket.SendBuf(Buffer, SizeOf(Buffer));
  ProgressBar1.Position := ProgressBar1.Position + SizeOf(Buffer);
  Sleep(30);
until (NumRead = 0);
CloseFile(F);
Получатель
Код:
var
ReceivingFile : Boolean;
Len : Integer;
FStream: TFileStream;


procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
var
  iLen: Integer;
  Bfr: Pointer;
  Text : string;
begin
  if not ReceivingFile then
  begin
    Text := Socket.ReceiveText;
    if Copy(Text, 1, 5) = 'SIZE!' then
    begin
      Delete(Text, 1, 5);
      Len := StrToInt(Text);
      ProgressBar1.Max := StrToInt(Text);
      FStream := TFileStream.Create('C:\ReceivedFile.exe', fmCreate or fmShareDenyWrite);
      ReceivingFile := True;
    end;
  end
  else
  begin
    iLen := Socket.ReceiveLength;
    GetMem(Bfr, iLen);
    try
      Socket.ReceiveBuf(Bfr^, iLen);
      FStream.Write(Bfr^, iLen);
      Progressbar1.Position := ProgressBar1.Position + iLen;
    finally
       FreeMem(Bfr);
       if Assigned(FStream) and (FStream.Size = Len) then
       begin
         FStream.Free;
         FStream := nil;
         ReceivingFile := False;
       end;
    end;
  end;
end;

а можно подсказать как это сделать? потому что я не очень хорошо понимаю логику delphi. Тип могу создать обычное приложение, но с локальными никогда еще не сталкивался и по этому не все знаю команды. Буду очень благодарен
 
Вверх Снизу