Модераторы: Snowy, Poseidon, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с Indy, не отправляет данные 
V
    Опции темы
CynicRus
Дата 2.4.2015, 22:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 248
Регистрация: 31.5.2012

Репутация: нет
Всего: 5



Приветствую уважаемых форумчан.Использую Delphi XE 3 и входящие в комплект Indy. Задача - ответ на запрос Policy от флеш сокета:
Код

procedure TPolicyServer.IdTCPServer1Execute(AContext: TIdContext);
var
  strm: TMemoryStream;
  data: TIdBytes;
  s: string;
begin
if AContext.Connection.Connected then
  begin
  strm := TMemoryStream.Create;
  try
    // read until disconnected
    AContext.Connection.IOHandler.ReadStream(strm, -1, True);
    strm.Position := 0;
    ReadTIdBytesFromStream(strm, data, strm.Size);
     //Log('TPolicyServer',BytesToStringRaw(Data));
    s:=BytesToStringRaw(Data);
     if CompareText(trim('<policy-file-request/>'),trim(s)) = 0 then
       begin
       Log('TPolicyServer',BytesToStringRaw(Data));
       Log('TPolicyServer',CrossDomainResponse);
       Sleep(5);
       AContext.Connection.IOHandler.WriteLn(CrossDomainResponse);
       AContext.Connection.Disconnect;
       end;

  finally
    strm.Free;
  end;
end;

запрос принимаю, по идее - должен на него ответить. А по факту, смотрю в сниффере - код отправки вроде отрабатывает, но вместо нужного мне пакета - отправляет 60 байт хлама. 1 раз. Что я делаю не так?

PS: в обратку шлю:
Код

const
    CrossDomainResponse =
    '<?xml version="1.0"?>'+
    '<!DOCTYPE cross-domain-policy SYSTEM "/xml/dtds/cross-domain-policy.dtd">' +
    '<cross-domain-policy>' +
    '<site-control permitted-cross-domain-policies="master-only"/>' +
    '<allow-access-from domain="*" to-ports="*" />' +
    '<allow-http-request-headers-from domain="*" headers="*" secure="false" />' +
    '</cross-domain-policy>' + #0;

но в сниффере этого дела не наблюдаю, только 60 байтовый пакет.

PS: при этом вот такой ###код работает, но через раз:
Код

s := AContext.Connection.Socket.ReadLn('*', 5000);
     Log('TPolicyServer',S);
    if TextPos(PAnsiChar(S), '<policy-file-request/>') <> nil then
      begin
      AContext.Connection.Socket.WriteLn(CrossDomainResponse);
      AContext.Connection.Disconnect;
      end;


Это сообщение отредактировал(а) CynicRus - 2.4.2015, 23:12
PM MAIL   Вверх
CynicRus
Дата 3.4.2015, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 248
Регистрация: 31.5.2012

Репутация: нет
Всего: 5



Если кому понадобится - проблема решается вот так:
Код

procedure TPolicyServer.IdTCPServer1Execute(AContext: TIdContext);
var
  strm: TMemoryStream;
  data: TIdBytes;
  s: string;
begin
  if AContext.Connection.Connected then
  begin
    strm := TMemoryStream.Create;
    try
      // read until disconnected
      AContext.Connection.IOHandler.ReadStream(strm,
        AContext.Connection.IOHandler.InputBuffer.Size, false);
      strm.Position := 0;
      ReadTIdBytesFromStream(strm, data, strm.Size);
      // Log('TPolicyServer',BytesToStringRaw(Data));
      s := BytesToStringRaw(data);
      if CompareText(trim('<policy-file-request/>'), trim(s)) = 0 then
      begin
        Log('TPolicyServer', BytesToStringRaw(data));
        Log('TPolicyServer', CrossDomainResponse);
        AContext.Connection.IOHandler.WriteBufferOpen;
        AContext.Connection.IOHandler.Write(CrossDomainResponse);
        AContext.Connection.IOHandler.WriteBufferFlush;
        AContext.Connection.IOHandler.WriteBufferClose;
        AContext.Connection.Disconnect;
      end;

    finally
      strm.Free;
    end;
  end
  else
    Sleep(10);
end;

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0866 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.