Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > Послать файл от TclientSocket1 на TserverSocket1


Автор: seferot 13.9.2008, 13:52
Господа, подскажите как грамотно послать файл через компонент TclientSocket1 компоненту TserverSocket1 так чтобы он принял файл и ответил клиенту, что файл принят. Скачать файл с сервера не составляет проблем, но закачать файл на сервер от клиента пока не получается!!!.

Автор: BaD_SeCt0R 13.9.2008, 22:20
Смотри ссылки внизу страницы.

Автор: seferot 14.9.2008, 20:07
Цитата(BaD_SeCt0R @ 13.9.2008,  22:20)
Смотри ссылки внизу страницы.

Нууу, очень полезный совет. Спасибо, уже смотрел! Только там нет информации о том, как послать файл от клиента на сервер. 

Автор: BaD_SeCt0R 14.9.2008, 20:20
Цитата(seferot @  14.9.2008,  20:07 Найти цитируемый пост)
Только там нет информации о том, как послать файл от клиента на сервер. 

Абсолютно также, как и с сервера на клиент. Принцип не меняется.

Автор: seferot 15.9.2008, 09:16
Есть ли у вас конкретный примерчик реализации передачи файла от клиента на сервер? smile

Добавлено через 12 минут и 51 секунду
И ещё вопрос: вот пример исходника который отсылает файл с сервера на клиента...
Код

procedure TForm1.ClientRead(Sender: TObject; Socket: TCustomWinSocket);
var
    NewSize, FileName, PathCopy : string ;
    comand : string ;
begin
     comand := socket.ReceiveText ;
     if rem  then
     begin
        try
          fs.Write(comand[1],length(comand));
          if (fs.Size = Filesize) or (length(comand) = 0) then
          begin
               fs.Free ;
               rem := false ;
               client.Socket.SendText('GETOK');
               client.Close ;
               exit;
          end;
        except
        end;
     end;

     if copy(comand,1, 5) = 'size:' then
     begin
           NewSize := copy(comand, 6, pos(#0, comand)-6);
           FileSize := strToint(NewSize);
           delete(comand, 1, pos(#0, comand));

           if copy(comand, 1, 9) = 'filename:' then
           begin
                FileName := copy(comand, 10, pos(#0, comand)-10);
                delete(comand, 1, pos(#0, comand));
           end;

           if copy(comand, 1, 5) = 'path:' then
           begin
                 PathCopy := copy(comand, 6, pos(#0, comand)- 6);
                 delete(comand, 1, pos(#0, comand));
                 if PathCopy = '' then
                 PathCopy := 'C:\';
                 if PathCopy[length(PathCopy)] <> '\' then
                 PathCopy := PathCopy+'\';
                 if not DirectoryExists(PathCopy) then
                 begin
                      try
                         mkDir(PathCopy);
                      except
                            PathCopy := 'C:\';
                      end;
                 end;           

                 rem := TRUE ;
                 fs := TfileStream.Create(pathCopy+Filename, fmCreate);
                 fs.Write(comand[1], length(comand));
           end;
      end;
end;
 Здесь сервер передает файловый поток клиенту, но если файл менее 8 кило, то клиент получат файл, но не уничтожается файловый поток
Код

if (fs.Size = Filesize) or (length(comand) = 0) then
          begin
               fs.Free ;
               rem := false ;
               client.Socket.SendText('GETOK');
               client.Close ;
               exit;
          end;
. Что посоветуете?

Автор: seferot 22.9.2008, 12:53
Я решил все свои вопросы. Спасибо smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)