![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
реализация сетевого протокола поверх tcp соединения
Zorro666 © (2006-10-10 14:35:00)Добрый день!
Есть описание протокола обмена пакетами с сервером, поверх tcp соединения
какой объект использовать для этого?
ttcpclient или tidtcpclient (indy)?
какой командой отправлять заголовок и содержимое пакета?
Вот описание самого протокола: http://agent.mail.ru/protocol.html?Submit=%D0%9F%D1%80%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D1%8E+%D1%81%D0%BE%D0%B3%D0%BB%D0%B0%D1%88%D0%B5%D0%BD%D0%B8%D0%B5
Структура заголовка на С++
{
u_long magic;
u_long proto;
u_long seq;
u_long msg;
u_long dlen;
u_long from;
u_long fromport;
u_char reserved[16];
}
Содержание пакета:
Пакет: Сообщение
Имя пакета: MRIM_CS_MESSAGE
Тип пакета: cs
поле seq должно содержать номер, который в последствии будет содержаться в заголовке пакета MRIM_CS_MESSAGE_STATUS, оповещающем клиента о статусе доставки данного сообщения.
Параметры:
UL ## flags ## флаги ##
MESSAGE_FLAG_OFFLINE ## Сообщение пришло, пока клиент был отключен
MESSAGE_FLAG_NORECV ## Отправителю сообщения не требуется подтверждения доставки
MESSAGE_FLAG_AUTHORIZE ## Сообщение является запросом на авторизацию
MESSAGE_FLAG_SYSTEM ## Сообщение является системным уведомлением администрации
MESSAGE_FLAG_RTF ## В сообщении содержится форматированная часть
MESSAGE_FLAG_CONTACT ## Сообщение представляет из себя пересланный список контактов. Текст сообщения в этом случае должен представлять из себя список адресов и ников пересылаемых контактов, перечисленных через точку с запятой. <адрес1>;<ник1>;<адрес2>;<ник2>;<адрес3>;<ник3>;...
MESSAGE_FLAG_NOTIFY ## Это сообщение-уведомление "Вам пишут". Должно посылаться каждые 10 секунд, при более длинной паузе клиент-получатель должен считать, что отправитель прекратил написание. Текст такого сообщения должен состоять из одного пробела.
MESSAGE_FLAG_MULTICAST ## Сообщение направлено списку получателей, а не одному. Поле to в таком случае состоит из списка получателей, перечисленных через запятую. Максимальная длина списка - 50 адресов.
LPS ## to ## email получателя
LPS ## message ## текстовая версия отправляемого сообщения
LPS ## rtf-message ## отформатированная версия отправляемого сообщения, в случае наличия обоих версий сообщения приоритет имеет rtf-версия. Она должна содержать rtf-текст упакованный gzip в base64 представлении. То есть:
BASE64(
GZIP(
UL количество LPS (должно быть не менее 2)
LPS rtf_text_with_all_rtf_headers_and_tags
LPS цвет фона в виде UL
)
)
Куда это всё пихать и как это в делфи будет выглядеть
или хотя бы такой пакет:
Пакет: Установка соединения
Имя пакета: MRIM_CS_HELLO
Ответ: MRIM_CS_HELLO_ACK
Тип пакета: cs
Описание: Первый пакет, отправляемый на сервер.
С уважением,
Р.Р.
han_malign (2006-10-11 10:44:00) [1]
> те, что в инете нашел только обмен текстом, строк и т.д. - нет структурных пакетов
- а что - текст и строки - структурными пакетами не являются?
> какой командой отправлять заголовок и содержимое пакета?
- как ни странно, одной и той же, и желательно в одном пакете...
Учи матчасть...
Орион (2006-10-10 20:52:00) [2]> [2] Zorro666 (10.10.06 20:33)
> те, что в инете нашел только обмен текстом, строк и т.д. - нет структурных пакетов :(
Значит плохо искал.
Ketmar (2006-10-10 20:38:00) [3]>[2] Zorro666 10-Oct-2006, 20:33
>мне надо именно это
тебе надо -- ты и делай. мы-то тут при чём? или за тебя весь код писать? вопросы принято задавать так: "я делаю то-то и то-то (вот код), получается это и это (вот описание ошибки). не подскажете, в чём может быть проблема и куда копать?" так что напиши сначала.
Zorro666 (2006-10-10 20:33:00) [4]мне надо именно это - отправлять заголовок и содержимое
может есть ссылка на какой-то исходник
те, что в инете нашел только обмен текстом, строк и т.д. - нет структурных пакетов :(
Dmitrij_K (2006-10-10 14:41:00) [5]
> какой объект использовать для этого?
Любой TCP, какой больше нравится.
> какой командой отправлять заголовок и содержимое пакета?
может для начала попробуешь сделать что-то попроще?