На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Соблюдайте общие правила форума
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Указывайте точные версии Delphi и используемых сетевых библиотек.

Не приветствуется поднятие старых тем. Если ваш вопрос перекликается со старой темой, то для вопроса лучше создать новую тему, а старую указать в первом сообщении с описанием взаимосвязи.

Внимание:
попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки бан.
Мат в разделе - бан на три месяца...

Полезные ссылки:
user posted image MSDN Library user posted image FAQ раздела user posted image Поиск по разделу user posted image Как правильно задавать вопросы


Выразить свое отношение к модераторам раздела можно здесь: user posted image Krid, user posted image Rouse_

Модераторы: Krid, Rouse_
  
> Проблема с отправкой MemoryStream от сервера к клиенту , все это с помощью INDY из Делфи 7
    Друзья, в чем дело? Что не так? вот строчка сервера, который получая строку от клиента, отправляет ему Strings:
    Код:
    ExpandedWrap disabled
      if(AThread.Connection.ReadLn()='clientexec')then begin
         OnlnS := TMemoryStream.Create;
         OnlnS.Position:=0;
         ValueListEditor1.Strings.SaveToStream(OnlnS);
         Athread.Connection.WriteStream(OnlnS,true,false);
         //Athread.Connection.WriteInteger(5);
         Onlns.Free;
      end;

    а вот клиент:
    Код:
    ExpandedWrap disabled
      Client.Connect();
         OnlineS := TMemoryStream.Create;
         Client.WriteLn('clientexec');
         OnlineS.Position:=0;
         Client.ReadStream(OnlineS,-1,true);                  //в этой строчке таймаут!!!!
         ValueListEditor1.Strings.LoadFromStream(OnlineS);
         Client.Disconnect();

    почему, возникает ошибка таймаута??? Помогите пожалуйста!

    это было час назад. теперь я очень намудрил, и просто шлю мемористрим от клиента к серверу:
    клиент:
    ExpandedWrap disabled
      procedure TForm1.FormCreate(Sender: TObject);
      var i:Int64; //думал проблема в представлении чисел, но даже инт64 не помогает
      p:TStringList;
      begin
         client.Connect();
         OnlineS := TMemoryStream.Create;
         p:=TStringList.Create;
         p.Add('vovik');
         client.WriteInteger(5);
         //ValueListEditor1.Strings.SaveToStream(OnlineS);
         p.SaveToStream(OnlineS);
         //OnlineS.Position:=0;
         i:=OnlineS.Size;
         client.WriteStream(OnlineS,true,false,i);
         client.Disconnect();
         Onlines.Free;
      end;


    сервер:
    ExpandedWrap disabled
      procedure TForm1.ServerExecute(AThread: TIdPeerThread);
      var
       FN: String;
       F: TFileStream;p:TStringList;h:TStrings;
      begin
         i:=AThread.Connection.ReadInteger(true);
         h:=TStrings.Create;
         ShowMessage(intToStr(i));
         OnlnS := TMemoryStream.Create;
         p:=TStringList.Create;
         //AThread.Connection.ReadStream(OnlnS,-1,false); //если эта строка, то ошибка памяти
         AThread.Connection.ReadStrings(h);              //если эта(вообще не передаю поток), то ошибка абстрактного класса
         ShowMessage('proverka svza');
         OnlnS.Position:=0;
         p.LoadFromStream(OnlnS);
         p.Free;
         OnlnS.Free;

    помогите очень прошу!
      ExpandedWrap disabled
        client.WriteStream(OnlineS,true,true,OnlineS.Size); // посылай так
        AThread.Connection.ReadStream(OnlnS,-1,false); // принимай так

      А h:TStrings переделай в h:TStringList;
      TStrings не годится, так как он абстрактный
        Абстрактный клас,это клас, методы которого надо перекрыть?Ладно, тут я допустил ошибку. Но с передачей размера,ничего не меняется!
        WildBear пишет:
        ExpandedWrap disabled
          client.WriteStream(OnlineS,true,true,OnlineS.Size); // посылай так

        у меня во втором примере клиента вот как:
        ExpandedWrap disabled
          var i:Int64; //думал проблема в представлении чисел, но даже инт64 не помогает
          .....
          i:=OnlineS.Size;
          client.WriteStream(OnlineS,true,false,i);


        тогда в строчке сервера
        ExpandedWrap disabled
          AThread.Connection.ReadStream(OnlnS,-1,false);

        возникает ошибка: Out of memory while expanding memory stream
          Киньте кто-нибудь рабочий исходник передачи MemoryStream()!!!
            Глянь еще раз мою строчку на передачу...
              офигеть, спасибо! Я чуть с ума не сошел пока передвал)) Объясни пожалуйста, почему в случае FileStream
              ExpandedWrap disabled
                client.WriteStream(OnlineS,true,FALSE);


              a MemoryStream
              ExpandedWrap disabled
                client.WriteStream(OnlineS,true,TRUE,OnlineS.Size);
              Сообщение отредактировано: ragnarek -
                Нет, в обоих случаях подходит один и тот же вариант. Просто второе TRUE означает, что перед посылкой потока должен быть передан его размер (OnlineS.Size)
                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                0 пользователей:


                Рейтинг@Mail.ru
                [ Script execution time: 0.0693 ]   [ 16 queries used ]   [ Generated: 24.07.26, 10:16 GMT ]