Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Интернет и сети
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 15.02.2021, 21:22
Menmo Menmo вне форума
Прохожий
 
Регистрация: 15.02.2021
Сообщения: 1
Версия Delphi: Delphi 10.4
Репутация: 10
По умолчанию Обмен файлами и информацией ClientSocket and ServerSocket

Дорогие программисты, помогите разобраться.. Немного туплю, только учусь кодить, всё по примерам так сказать, не бейте тапками.
Нужна помощь, обмениваться файлами между клиентом и сервером и наоборот.
Как отсылать файл с сервера на клиент я разобрался.
Код:
отправляю (сервер)
Код:
begin
  MS := TMemoryStream.Create; // Создаём буфер для файла
  MS.LoadFromFile('.\Config\'+Datetostr(Date)+'\zav.txt'); // Загружаем файл в буфер
  // Посылаем информацию о файл (команда # название # размер)
  ServerSocket1.Socket.Connections[0].SendText('file#'+'.\Config\'+Datetostr(Date)+'\zav.txt'+'#'+IntToStr(MS.Size)+'#');
  MS.Position := 0; // Переводим каретку в начало файла
  P := MS.Memory; // Загружаем в переменную "P" файл
  Size := ServerSocket1.Socket.Connections[0].SendBuf(P^, MS.Size); // Посылаем файл
  // Выводим прогресс
  ProgressBar1.Position := Size*100 div MS.Size;
  StatusBar1.SimpleText := 'Отправлено '+IntToStr(Size)+' из '+IntToStr(MS.Size)+' байт';
   end;

Получаю (клиент)

Код:
var
  Rtext: string; // Принятый текст
begin
  Rtext := Socket.ReceiveText;
  if Receive then // Если клиент в режиме приёма файла, то...
    Writing(RText) // Записываем данные в буфер
  else // Если клиент не в режиме приёма файла, то...
  begin
    if Copy(Rtext, 0, Pos('#', Rtext) -1) = 'file' then // Если это файл, то...
    begin
      MS := TMemoryStream.Create; // Создаём буфер для файла
      Delete(Rtext, 1, Pos('#', Rtext)); // Определяем имя файла
      Name := Copy(Rtext, 0, Pos('#', Rtext) -1); // Определяем имя файла
      Delete(Rtext, 1, Pos('#', Rtext)); // Определяем размер файла
      Size := StrToInt(Copy(Rtext, 0, Pos('#', Rtext) -1)); // Определяем размер файла
      Delete(Rtext, 1, Pos('#', Rtext)); // Удаляем последний разделитель
      Label56.Caption := 'Размер файла: '+IntToStr(Size)+' байт'; // Выводим размер файла
      Label57.Caption := 'Имя файла: '+Name; // Выводим имя файла
      Receive := true; // Переводим сервер в режим приёма файла
      Writing(RText); // Записываем данные в буфер
    end;
  end;
end;

Код:
procedure TForm1.Writing(Text: AnsiString);
begin
  if MS.Size < Size then // Если принято байт меньше размера файла, то...
    MS.Write(Text[1], Length(Text)); // Записываем в буфер
  // Выводим прогресс закачки файла
  ProgressBar1.Position := MS.Size*100 div Size;
  StatusBar1.SimpleText := 'Принято '+IntToStr(MS.Size)+' из '+IntToStr(Size);
  if MS.Size = Size then // Если файл принят, то...
  begin
    Receive := false; // Переводим клиента в нормальный режим
    MS.Position := 0; // Переводим каретку в начало буфера
    MS.SaveToFile(Name); // Сохраняем файл
    ClientSocket1.Socket.SendText('end'); // Посылаем команду "end", то есть файл принят
    MS.Free; // Убиваем буфер
    StatusBar1.SimpleText := 'Файл принят';
  end;

А как обратную связь сделать... Пытался посылать, и вроде как мне статус бар сигнализирует, что файл отправлен, однако он не сохраняется сервером (делал обратный код)
Ответить с цитированием
 


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 07:19.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter