Форум по 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;

А как обратную связь сделать... Пытался посылать, и вроде как мне статус бар сигнализирует, что файл отправлен, однако он не сохраняется сервером (делал обратный код)
Ответить с цитированием
  #2  
Старый 21.02.2021, 18:38
APTEMKA APTEMKA вне форума
Прохожий
 
Регистрация: 28.09.2019
Сообщения: 13
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от Menmo
туплю, только учусь кодить, всё по примерам так сказать, не бейте тапками.
Привет,я видел отрывки этого проекта в интернете,но не нашёл полностью его. Есть ли у тебя ссылка на него или готовый проект?
У меня задача немного другая,но очень бы выручил.
Ответить с цитированием
  #3  
Старый 12.06.2021, 13:58
Goras Goras вне форума
Прохожий
 
Регистрация: 10.11.2019
Сообщения: 9
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Ну для начала настроить сервка на сохраниение надо, как минимум

Цитата:
однако он не сохраняется сервером
Ответить с цитированием
  #4  
Старый 23.06.2021, 17:49
Альберт Альберт вне форума
Прохожий
 
Регистрация: 23.06.2021
Сообщения: 1
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

У меня вопрос. А как то можно автоматизировать взаимодействие с игровыми автоматами? А то статейку почитал https://center-bereg.ru/kak-vybrat-i...ry-onlajn.html Не дает покоя эта тема.
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter