|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Обмен файлами и информацией 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; А как обратную связь сделать... Пытался посылать, и вроде как мне статус бар сигнализирует, что файл отправлен, однако он не сохраняется сервером (делал обратный код) |