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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.03.2010, 17:11   #1
rombler69
Пользователь
 
Регистрация: 09.02.2009
Сообщений: 25
По умолчанию Передача файла от клиента к серверу TFileStream

Добрый день

Пытаюсь передать файл от клиента к серверу
файл передается, но в нем не хватает 4 байт

вот код клиента
кнопка1, это отправка потока на сервер
кнопка2- диалог выбора файла
Код:
var
  Form1: TForm1;
  FName: string;


procedure TForm1.Button1Click(Sender: TObject);
begin
IdTCPClient1.Connect;
IdTCPClient1.IOHandler.WriteLn(FName);
IdTCPClient1.IOHandler.WriteFile(FName,True);
Button1.Enabled:=False;
IdTCPClient1.DisConnect;

end;

procedure TForm1.Button2Click(Sender: TObject);
begin

  if OpenDialog1.Execute then begin
    Edit1.Text := OpenDialog1.FileName;
    Label1.Caption := Edit1.Text;
    FName := Label1.Caption;

  end;
end;

end.
вот код сервера
Код:
var
  Form1: TForm1;
  FName: string;


procedure TForm1.IdTCPServer1Execute(AContext: TIdContext);
var
 FileStream : TFileStream;
 FileName : String;

begin

  FileName:= AContext.Connection.IOHandler.ReadLn;
  FileStream:=TFileStream.Create('C:\'+ExtractFileName(FileName),fmCreate);
  AContext.Connection.IOHandler.ReadStream(FileStream);
  FileStream.Free;
  AContext.Connection.Disconnect;
end;
end.
подскажите куда эти 4 байта исчезают и как с этим бороться?
Спасибо.
rombler69 вне форума Ответить с цитированием
Старый 30.03.2010, 17:45   #2
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

Передавать через потоки. Как-то так:

Клиент:
Цитата:
memoryStream.loadFromFile('asd.txt' );
IdTCPClient1.IOHandler.Write(memory Stream.size);
IdTCPClient1.IOHandler.Write(memory Stream);

Сервер:
Цитата:
size:=AContext.Connection.IOHandler .ReadInt64();
mm:=TMemoryStream.Create;
AContext.Connection.IOHandler.ReadS tream(mm, size);
TwiX вне форума Ответить с цитированием
Ответ


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

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
IdHTTPServed delphi передача файла серверу postal2 Работа с сетью в Delphi 4 29.01.2010 13:54
Передача функции TServerSocket и TFileStream dns-s Работа с сетью в Delphi 2 26.03.2008 21:15
как серверу INDY распознать клиента мандарин Работа с сетью в Delphi 2 24.10.2007 13:31
Передача команд серверу и клиенту OrdJONY Работа с сетью в Delphi 9 28.08.2007 10:51