Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Общие вопросы > как по TCP/IP передать структуру |
Автор: xrays777 27.7.2009, 21:34 |
к примеру, есть структура: struct event { int desc; uint32_t mask; uint32_t time; uint32_t len; char name[256]; } вопросы: 1) каким способом ее можно передать по TCP? я пока остановился на следующем способе: последовательно передавать все поля структуры 2) какое максимальное значение имени файла в Unix (по-моему, 256)? поправьте, если ошибаюсь спасибо всем, кто уделил время |
Автор: GoldFinch 27.7.2009, 21:54 | ||
|
Автор: xrays777 27.7.2009, 22:03 |
спасибо, т.е. так прокатит?! а как быть, если массив чаровский нестатический, а содержит указатель на строку, а эта строка может быть различной, а требуется передать как бы саму структуру + строку, на которую указывает указатель, а сам бы указатель не нужно было передавать, т.е. char* str="Hello, world"; struct event { int desc; uint32_t mask; uint32_t time; uint32_t len; // длинна строки на которую указывает name char* name; // указатель на строку } event e; e.name=str; e.len=длинна этой строки |
Автор: andrew_121 27.7.2009, 22:25 |
xrays777, передавай строку, ее длину. а на втором конце собирай. |
Автор: vinick 27.7.2009, 22:26 | ||
Ни в коем случае!!! Если хочешь передавать структуру целиком, то
PATH_MAX у меня определяется как 4096. Это вроде как максимальный полный путь с завершающим нулем. |
Автор: andrew_121 27.7.2009, 22:27 |
Это почему же? Добавлено через 2 минуты и 56 секунд либо сериализуй структуру. |
Автор: GoldFinch 27.7.2009, 23:21 |
*сериализуй - значит юзай boost.serialization |
Автор: azesmcar 28.7.2009, 08:24 | ||
Про выравнивание структур не забыли?
|
Автор: GoldFinch 28.7.2009, 08:48 |
azesmcar, а при чем тут твое выравнивание, если код на обоих сторонах компилит 1 компилятор? и почему выравнивание 1? |
Автор: azesmcar 28.7.2009, 08:53 | ||
1. Об этом нигде не сказано (хотя в этом (да и не только в этом) случае могут возникнуть и другие проблемы, но их можно решить по ходу). 2. Настройки в обоих проектах те же самые? 3. Зачем посылать 4 или 8 байт вместо 1-го?
сравни размеры. |
Автор: GoldFinch 28.7.2009, 10:04 |
azesmcar, в большинстве ситуаций, выравнивание значимо больше трафика не сделает. хотя и прироста быстродействия никакого не даст. зато лишние строчки кода есть. |
Автор: xrays777 28.7.2009, 10:06 |
ребята, всем преогромное спасибо за помощь, решил передавать структуру(кроме указателя на строку) и отдельно саму строку спасибо еще раз всем |
Автор: azesmcar 28.7.2009, 10:08 | ||
Я назвал 3 причины, и потребление траффика лишь одна из них. Да, если программа за всю сознательную жизнь посылает одну структуру размером в 3 байта - может и не даст, попробуй сгруппировать структуры при отсылке в один пакет, попробуй сделать структуру побольше. И почему тебя так сильно волнуют лишние строки кода? ![]() Хранишь место на диске? Байт - гигабайт бережет. |
Автор: GoldFinch 28.7.2009, 13:42 |
azesmcar, много кода - сложнее читать |
Автор: azesmcar 28.7.2009, 14:01 |
абсолютно не согласен. Эти два фактора никак не связаны. В некоторых ситуациях даже наоборот, если пытаться сократить программу, код становиться нечитабельным. |
Автор: xrays777 28.7.2009, 15:28 |
всем спасибо, тему закрываю |