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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.06.2010, 14:56   #1
Le Celticant
Новичок
Джуниор
 
Регистрация: 12.06.2010
Сообщений: 6
По умолчанию Передача файла через TClientSocket к TServerSocket и др.

Проблема в следующем: надо передать файл от клиента к серверу. Сначало пытался сделать обычным методом, но выяснилось, что файлы можно посылать только от сервера к клиенту, а не на оборот(клиент не может отправлять стримы). Поэтому решил использовать исключительно для передачи файлов NMStrm и NMStrmServer соответсвенно.
Код отправки данных о файле:
Код:
Procedure FileUpload(FileDir: String);
var
    FMStream: TMemoryStream;
begin
  FMStream := TMemoryStream.Create;
  FMStream.LoadFromFile(FileDir);
  MainForm.NMStm1.PostIt(FMStream);
  FMStream.Free;
end;
При получении на сервере(событие OnMSG):
Код:
procedure TForm3.StartDownload(Sender: TComponent; const sFrom: String;
  strm: TStream);
var
  DStream: TMemoryStream;
begin
  DStream := TMemoryStream.Create;
  DStream.CopyFrom(Strm, NMStmServer1.BytesTotal);
  DStream.SaveToFile(edt2.text);
end;
Но ничего не происходит. Вообще, я сначало грешил, что стримы не работают, но потом проверил на клиенте:
Код:
Procedure FileUpload(FileDir: String);
var
    FMStream: TMemoryStream;
begin
  FMStream := TMemoryStream.Create;
  FMStream.LoadFromFile(FileDir);
  FMStream.SaveToFile('ololo.txt');
  FMStream.Free;
end;
Отлично сохранило.
Однако, после отправки и при непосредственно получении ничего не происходит, даже пустой файл не создаётся(и да, я проверял, действие происходит, т.е. чтото там пришло).
По гуглил, оказывается я ни один такой умный, и вроде как это считается единственным методом. И что удивительно, у меня всё правильно. Но тем не менее не работает.
Выкладывать весь исходный код смысла нет - он слишком большой, да и данные процедуры почти не зависимы от чего-либо.
P.S. Так же я использовл кучу других компонентов, еврейских и не очень. Эффект симметричен.
Le Celticant вне форума Ответить с цитированием
Старый 12.06.2010, 15:10   #2
Sensizu
Otsukitakitte
Форумчанин
 
Аватар для Sensizu
 
Регистрация: 01.10.2009
Сообщений: 126
По умолчанию

Я не силён в протоколах передачи файлов, но там вроде другой лучше использовать (если файлы не только текст). Толи UDP... Не помню...
Помог - ставь плюс.
$("question").onAnswer(function() { $(this).getItWright(true); });
Sensizu вне форума Ответить с цитированием
Старый 12.06.2010, 15:20   #3
Le Celticant
Новичок
Джуниор
 
Регистрация: 12.06.2010
Сообщений: 6
По умолчанию

Я уже пробовал по UDP, но на самом деле УДП только быстрее, но куда менее надёжен - пакет может прийти как повреждённый, так и вообще не прийти. И вообще какбэ не принципиально в данном случае.
Проблема не связанна с протоколом, я уверен.
Le Celticant вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Компоненты TServerSocket и TClientSocket Vadim Компоненты Delphi 5 15.03.2010 20:34
TServerSocket, TClientSocket prod87 Работа с сетью в Delphi 7 26.10.2009 22:38
TServerSocket и TClientSocket передача и прием файла Vovandows Работа с сетью в Delphi 2 24.09.2008 09:23
Передача файла через TServerSocket и TClientSocket Vanya Работа с сетью в Delphi 10 08.04.2008 18:12
проблема с TServerSocket и с TClientSocket DOLBY Работа с сетью в Delphi 56 14.01.2008 16:12