Конференция "Начинающим" » передача параметров по TCP [D7, WinXP]
 
  • tvmagic (28.04.12 13:30) [0]
    Ребята, хотелось бы обменяться опытом, кто как делает.
    Вопрос в следующем.
    Требуется передавать по сети группу параметров и их значения.
    например:
    param1=500
    param2='значение1'
    param3='значение2'
    param4=700
    и т.д.
    Я делаю следующим образом:
    1. записываю параметры в TMemIniFiles
    2. TMemIniFiles сохраняю в TStringList
    3. TStringList сохраняю в Tmemorystreem
    4. Tmemorystreem шифрую, запаковываю и передаю по сети.
    5. Принимающая сторона делает все в обратном порядке.

    Какие Вы, господа, можете предложить способы передачи параметров по сети. Но параметры быть записаны Tmemorystreem. Это обязательно. Так как только в таком виде я могу запаковать и зашифровать.
    Жду Ваших примеров.
    Спасибо!
  • Медвежонок Пятачок © (28.04.12 14:11) [1]
    1. записываю параметры в TMemIniFiles
    2. TMemIniFiles сохраняю в TStringList
    3. TStringList сохраняю в Tmemorystreem


    А зачем так многоступенчато?
    Чтобы процессор не застаивался?
  • tvmagic (28.04.12 14:13) [2]

    > Медвежонок Пятачок ©

    для этого и тему то завел!
    Предложите лучший вариант!
  • Медвежонок Пятачок © (28.04.12 14:14) [3]
    ну и как всегда.
    идет подробное описание ереси формирования тела посылки.
    а в конце вопрос про способы передачи его по сети.
  • Медвежонок Пятачок © (28.04.12 14:15) [4]
    Предложите лучший вариант!

    Для начала исключить из огорода меминифайл
  • Медвежонок Пятачок © (28.04.12 14:16) [5]
    Затем, когда исключишь мемини, можно обойтись без стринглиста.
  • Медвежонок Пятачок © (28.04.12 14:17) [6]
    затем переставить местами вот это:
    4. Tmemorystreem шифрую, запаковываю и передаю по сети.

    на запаковываю, шифрую, передаю по сети.
  • tvmagic (28.04.12 14:19) [7]

    > Медвежонок Пятачок ©   (28.04.12 14:15) [4]
    >
    > Предложите лучший вариант!
    >
    > Для начала исключить из огорода меминифайл


    Пример можете привести формирования пакета?
  • Медвежонок Пятачок © (28.04.12 14:21) [8]
    пример исключения мемини?

    вот: курсор в начало строки с мемини, шифт-енд - дел.
    Оно?
  • tvmagic (28.04.12 14:27) [9]
    Ребята, прошу конкретные примеры привести, кто и как формирует пакеты.
    Обязательно нужно, чтобы пакет был в виде TMemoryStream.
    Так как именно в таком виде мы его будет шифровать и паковать.

    Прошу конкретный пример?
  • sniknik © (28.04.12 14:45) [10]
    > Прошу конкретный пример?
    ты спрашиваешь?

    > Жду Ваших примеров.
    впечатление типа вот мой, теперь покажите ваши... но только твоего нет, есть набор слов. к тому же с ошибками.

    > Ребята, прошу конкретные примеры привести, кто и как формирует пакеты.
    без TMemoryStream. скрипач не нужен.
    так что бессмысленно здесь приводить, т.к. -
    > Обязательно нужно, чтобы пакет был в виде TMemoryStream.
  • tvmagic (28.04.12 14:52) [11]
    Ребята, пустой треп и ни одного дельного примера.
    Вывода два:
    1. либо читающие так и не поняли суть темы
    2. либо читающие и сами не знают дельного ответа
  • sniknik © (28.04.12 14:54) [12]
    > и ни одного дельного примера.
    с тебя пример берут.

    ну, ладно, вот промер формирования пакета...

    type
     TPaket = packed record
       param1: integer;
       param2: string[30];
       param3: string[30];
       param4: integer;
     end;

    const
     Paket: TPaket = (param1:500; param2:'значение1'; param3:'значение2'; param4:700);

  • Медвежонок Пятачок © (28.04.12 14:59) [13]
    2. либо читающие и сами не знают дельного ответа

    вывод три:
    оставь все как есть. твой код совершенен.
  • tvmagic (28.04.12 15:01) [14]
    Знаю я о таком методе.
    И пришлось от него отказаться.
    Дело в том, что параметров может быть пару десятков.
    Но не при каждой передаче пакета, я желаю передавать эти пару десятков параметров.

    Исходя из примера выше, передаются все параметры, описанные в  TPaket = packed record

    а это для меня не выход
  • Медвежонок Пятачок © (28.04.12 15:05) [15]
    я же говорю,- вывод номер три.
  • han_malign (28.04.12 15:05) [16]
    чиста канкретна
    s:= Format('param1=%u'#13#10'param2=%s'#13#10'param3=%s'#13#10'param4=%u'#13#10, [500,'значение1','значение2',700]);
    ms:= TMemoryStream.Create;
    try
       ms.Size:= Length(s);
       move(pointer(s)^, ms.Memory^, Length(s));
       ...
    finally
      ms.Free;
    end;



    - хотя нормальные люди предпочитают бинарное пакетирование, например:
    ASN.1(ГОСТ Р ИСО/МЭК 8824-1) - BER, CER, DER(ГОСТ Р ИСО/МЭК 8825-1), PER...
    http://book.itep.ru/4/44/asn44132.htm
    (в том числе TLV)


    > без TMemoryStream. скрипач не нужен.

    - ну что поделаешь, если халявные компоненты "шифрования"/компрессии для кнопкокидателей имеют только такой вход/выход...
  • tvmagic (28.04.12 15:09) [17]

    > я же говорю,- вывод номер три.


    еще варианты!
  • Медвежонок Пятачок © (28.04.12 15:09) [18]
    без вариантов.
  • sniknik © (28.04.12 15:13) [19]
    > Исходя из примера выше, передаются все параметры, описанные в  TPaket = packed record
    пример на то и пример, он показывает как, а не спектр возможностей... вообще тип может быть не один, а по необходимости n-oе количество, первым параметром просто ставишь признак типа... ну и делаешь базовый, только с этим признаком чтобы читать без проблем. все. остальное думаю ясно без слов.
  • han_malign (28.04.12 15:48) [20]
    http://en.wikipedia.org/wiki/Type-length-value
    так же, TLV - может расшифровываться как tag-length-value(ICQ OscarJ), где tag - идентифицирует объект/поле(предопределенного типа) для структур с опциональным содержимым...

    В ASN.1-PER - помимо тэгированных композитных классов(для "безверсионных" расширений протокола) - опциональные поля  задаются маской(BitString) без указания тэгов(и - в случае скаляров - длины) с известным порядком следования полей...

    Ну... - XML(ASN.1-XER, SOAP, etc...) и JSON - в данном случае можно не рассматривать, т.к. это избыточный вариант param=value...
    А вот посмотреть - надо, и особенно обратить внимание на порядок передачи произвольных текстовых данных...
  • tvmagic (28.04.12 21:09) [21]

    > чиста канкретна
    > s:= Format('param1=%u'#13#10'param2=%s'#13#10'param3=%s'#13#10'param4=%u'#13#10,
    >  [500,'значение1','значение2',700]);
    > ms:= TMemoryStream.Create;
    > try
    >    ms.Size:= Length(s);
    >    move(pointer(s)^, ms.Memory^, Length(s));
    >    ...
    > finally
    >   ms.Free;
    > end;
    >


    Спасибо за классный примерчик.
    Подскажите примерчиком, как теперь из строки, пример:
    param1=500
    param2=значение1
    param3=значение2
    param4=700

    найти нужный параметр и извлечь его значение
  • Cobalt © (29.04.12 02:20) [22]
    Рекомендую нанять программиста - дешевле обойдется.
    В т.ч. времени и нервов.
  • tvmagic (29.04.12 05:57) [23]
    Cobalt ©  
    козел
  • brother © (29.04.12 06:23) [24]
    оскорблять собеседников - плохой тон!
    после такого, обычно идет закрытие ветки, и правильно...
  • tvmagic (29.04.12 06:25) [25]

    > оскорблять собеседников - плохой тон!
    > после такого, обычно идет закрытие ветки, и правильно...
    >


    посылать нанять программиста - это тоже плохой тон.
    я сам знаю что мне делать.
    А если обратился на форум, то значит прошу помощи.
    Если нечего сказать по оставленной мной теме, тогда следует просто промолчать
 
Конференция "Начинающим" » передача параметров по TCP [D7, WinXP]
Есть новые Нет новых   [134436   +24][b:0][p:0.001]