Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.10.2011, 07:41   #1
OneNight
Новичок
Джуниор
 
Регистрация: 27.10.2011
Сообщений: 1
По умолчанию Ошибка в коде передачи файлов

Здравствуйте!
Написал вот такой код для передачи файлов клиент-сервер. Искажает содержимое файла, например в текстовом ставит какие-то пробелы или вообще меняет кодировку. Не могу найти ошибку в коде.
Сервер:
Код:
procedure TForm2.Button1Click(Sender: TObject);
var
  size: integer;
  P: ^byte;
begin
  MS:=TMemoryStream.Create;
  MS.LoadFromFile(Edit1.Text);
  ServerSocket1.Socket.Connections[0].SendText('file' + '#' + Edit1.Text + '#' + IntToStr(MS.Size) + '#');
  MS.Position:=0;
  P:=MS.Memory;
  Size:=ServerSocket1.Socket.Connections[0].SendBuf(P^, MS.Size);
end;
Клиент:
Код:
private
    { Private declarations }
    Name: string;
    Size: integer;
    Receive: boolean;
    MS: TMemoryStream;
 
procedure TForm3.Writing(Text: string);
begin
  if MS.Size < Size then
  MS.Write(Text[1], length(Text));
  if MS.Size = Size then
  begin
    Receive:=false;
    MS.Position:=0;
    MS.SaveToFile(Name);
    ClientSocket1.Socket.SendText('end');
    MS.Free;
  end;
end;
 
procedure TForm3.ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
var
  Rtext: string; 
begin
   Rtext := Socket.ReceiveText;
   if Receive then 
   Writing(RText) 
   else 
   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)); 
     Receive := true; 
     Writing(RText); 
 end;
end;
OneNight вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Организация передачи файлов. Denutrror Работа с сетью в Delphi 6 28.02.2011 04:12
Способы передачи файлов BoT_T Работа с сетью в Delphi 2 26.09.2010 18:32
передачи файлов через сокеты CHITER Работа с сетью в Delphi 5 09.07.2010 21:55
почему вылетает ошибка при передачи файлов через цокет leonw Работа с сетью в Delphi 6 19.01.2010 22:16
Ошибки передачи файлов (TServerSocket -> TClientSocket) Cold_Night Работа с сетью в Delphi 2 26.11.2009 17:43