![]() |
|
Модераторы: bsa |
![]()
|
|
| knopka |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 187 Регистрация: 17.1.2006 Где: Россия: Петербург Репутация: нет Всего: 1 |
сообщение передаваемое в сокет состоит из двух частей:
Скажите пожалуйста как это лучше сделать Заранее спасибо |
|||
|
||||
| Andrey44 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1501 Регистрация: 4.12.2006 Где: На работе Репутация: 2 Всего: 26 |
Создай структуру, и ее передавай.
-------------------- ????? ??, ??????? ?????. |
|||
|
||||
| knopka |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 187 Регистрация: 17.1.2006 Где: Россия: Петербург Репутация: нет Всего: 1 |
Я так и делал,
но со структурой приходит несколько символов, а должно быть явно больше, идеальным для меня было бы передача в формате вектор <char> но немогу сконвертировать структуру хотя бы в char |
|||
|
||||
| mrbrooks |
|
|||
![]() трололомен ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: 19 Всего: 306 |
knopka, ты бы код выложил. Достаточно твоего буфера и функций send(), recv().
|
|||
|
||||
| REZiaMIX |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 346 Регистрация: 3.11.2007 Репутация: 1 Всего: 4 |
Должно быть приблизительно так(в полупсевдокоде
Или более гибкий вариант:
При передаче строки надо учитывать что она прийдет без \0. Это сообщение отредактировал(а) REZiaMIX - 17.11.2008, 10:13 -------------------- ![]() |
||||
|
|||||
| knopka |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 187 Регистрация: 17.1.2006 Где: Россия: Петербург Репутация: нет Всего: 1 |
to REZiaMIX
Спасибо за помощь.
а как обработать ответное сообщение? вид сообщения: �▒��趣��pW�������� первые четыре это len? а остальные string как их извлечь из буфера? Добавлено через 6 минут и 2 секунды а после отправки надо делать
|
||||
|
|||||
| REZiaMIX |
|
||||||||||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 346 Регистрация: 3.11.2007 Репутация: 1 Всего: 4 |
len - длина поля string , без нулевого символа.
Тут делаем с a.string что надо (но учесть что она без '\0')
Да , надо. Объясню поподробней. В гибком варианте идет расчет , что при получении пакета мы сначала считаем len, len - длина поля string , без нулевого символа. А потом считываем len байтов , в итоге получим все ,что было отправлено. То что я написал - просто для наглядности и понятия что надо делать. Приблизительный код будет таким , но тк я не тестировал возможны ошибки. Просто надо понять что структура пакета: len char 4 байта len*char байтов Поле len вноситься чтобы сервер знал , какой длины сообщение string. При этом клиент должен соответственно заполнять поле len длиной string Сам до конца не понял , но наверное надо использовать для структур правильное выравнивание , иначе возможны ошибки:
Это сообщение отредактировал(а) REZiaMIX - 17.11.2008, 15:06 -------------------- ![]() |
||||||||||||||
|
|||||||||||||||
| knopka |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 187 Регистрация: 17.1.2006 Где: Россия: Петербург Репутация: нет Всего: 1 |
В том и загвоздка , что вопрос я упростил вопрос.
len у меня в задаче хранит всю длинну сообщения включая несколько полей uint и string |
|||
|
||||
| REZiaMIX |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 346 Регистрация: 3.11.2007 Репутация: 1 Всего: 4 |
А зачем хранить длину полей фиксированной длины?
Здесь мы должны знать len, чтобы считать string, а: адрес val1 = sizeof(len)+ len; val2 = sizeof(len)+ len + sizeof(val1); Простая арифметика) Это сообщение отредактировал(а) REZiaMIX - 17.11.2008, 16:07 -------------------- ![]() |
||||
|
|||||
| knopka |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 187 Регистрация: 17.1.2006 Где: Россия: Петербург Репутация: нет Всего: 1 |
а разве len это не длинна поле string? мы ведь нигде не добавляем к длинне сообщения ещё и размер самого поля uint Добавлено через 2 минуты и 58 секунд А если структуру преобразоватьв vector это не упростит задачу? Добавлено через 11 минут и 19 секунд С адресами я понял, а как из буфера (char*)&a прочитать значение для первого поля структуры? |
|||
|
||||
| REZiaMIX |
|
||||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 346 Регистрация: 3.11.2007 Репутация: 1 Всего: 4 |
len - длина поля string , уже писал. передавать vector думаю не лучшая идея a - обычная структура , с ней и работать надо как со структурой)
-------------------- ![]() |
||||||||
|
|||||||||
| knopka |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 187 Регистрация: 17.1.2006 Где: Россия: Петербург Репутация: нет Всего: 1 |
то есть при приёме
структура будет заполнена автоматически? |
|||
|
||||
| REZiaMIX |
|
||||||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 346 Регистрация: 3.11.2007 Репутация: 1 Всего: 4 |
Все поля , которые имеют неопределенный размер(в нашем случае string) надо както отдельно обрабатывать. Опечатка , там точка:
Тут мы получим размер поля , для последующего считывания string. далее считаем string
Если в структуре все поля имеют фикс. размер , то:
Автоматически заполнит всю структуру. -------------------- ![]() |
||||||||||
|
|||||||||||
| knopka |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 187 Регистрация: 17.1.2006 Где: Россия: Петербург Репутация: нет Всего: 1 |
Чё -то сообщение пустое
|
|||
|
||||
| REZiaMIX |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 346 Регистрация: 3.11.2007 Репутация: 1 Всего: 4 |
Чье? -------------------- ![]() |
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |