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


Автор: 7tk 5.4.2005, 11:13
Скажите как можно отправить пакет по протоколу SMPP в Delphi,
Структура пакета:
PDU Header(mandatory):
-command length -4 octets
-command id
-command status
-sequence number
PDU Body (Optional)
- Body

И как разобрать полученный пакет на эти параметры.



Автор: Snowy 5.4.2005, 12:53
как это делается:
1. Создаешь packed record с нужной тебе структурой.
2. Заполняешь поля.
3. Создаешь соединение TIdTCPClient'ом.
4. Создаешь стрим, отправляешь в него свой пакет. При необходимости несколько пакетов.
5. Отправляешь стрим в соединение через WriteStream
Получение.
Через ReadStream читаешь в стрим. Потом согласно RTF нарезаешь на нужные структуры.

Автор: 7tk 5.4.2005, 13:11
Спасибо.
А как создать стрим и отправить в него свой пакет

Автор: Snowy 5.4.2005, 13:49
Код

procedure SendSMPP;
type
  MyPacket=packed record // здесь описываем необходимую структуру пакета
    data1: word; // какие-то поля пакета
    data2: byte;  // рисуем здесь поля согласно структуре
    // ......
  end;
var
  s: TMemoryStream; // стрим с данными
  p: MyPacket; // наш пакет
  tcp: TIdTCPClient; // соединение
begin
  tcp:=TIdTCPClient.Create(nil); // создаем соединение
  tcp.port:=2202; tcp.Host:='hostname'; // настройки на машину и порт, которой отправляем
  try
    tcp.Connect; // пытаемся соедениться
    s:=TMemoryStream.Create; // создаем стрим
    p.data1:=22; p.data2:=18; ........ // первый пакет
    s.Write(@p,SizeOf(p)); // загодяем в стрим
    p.data1:=1892; p.data2:=99; ........ // второй пакет
    s.Write(@p,SizeOf(p)); // загоняем в стрим
    // ..... загоняем в стрим подобным образом все необходимые данные
    // потом все это отправляем
    tcp.WriteStream(s,true,s.Size,false); // отправка данных в сеть
    tcp.Disconnect; // отключаемся
  except // если не удалось
    ShowMessage('Не могу соедениться');
  end;
  s.Free; tcp.Free; // уничтожаем стрим и соединение
end;

Вот таким образом можно реализовать практически любой протокол.
Главное описать его структуру и заполнить ее необходимыми данными, согласно спецификации.

Автор: 7tk 5.4.2005, 17:40
Snowy, большое спасибо

Автор: Snowy 8.4.2005, 09:54
Вот, наткнулся на готовый компонент: http://bib.com.ua/info1609.html

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