Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C/C++ Сетевое программирование
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.04.2014, 20:59   #1
gunsoy
Форумчанин
 
Регистрация: 30.12.2010
Сообщений: 280
Вопрос Кросплатформенность данных передающиеся по сети

Здравствуйте.

Собираюсь написать tcp клиент + сервер, сам сервер на Linux, а клиент может быть на Linux или Windows. Пока что у меня только один компьютер и хочется узнать что требуется сделать для обеспечения кроссплатформенности передаваемых по сети данных, чтобы в будущем не столкнутся с проблеммами. Пока что мои тестовые сервер и клиент расположенные на одном компе работают нормально.

Я где-то слышал что в Windows и Linux могут быть разные размеры типов данных, например вроде бы тип int имеет разный размер в байтах.

Поможет ли обеспечить кроссплатформенность вместо такой записи

unsigned int i;

вот такая?

uint32 i;
или
uint8 i;

В общем подскажите что необходимо сделать для того, чтобы данные нормально читались и на клиенте, и на сервере?

Спасибо за внимание.
gunsoy вне форума Ответить с цитированием
Старый 01.04.2014, 21:41   #2
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,742
По умолчанию

Данным поверх транспортных протоколов все равно, главное чтобы формат пакетов был известен принимающей стороне.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 01.04.2014, 22:56   #3
ROD
Linux C++ Qt ARM
Старожил
 
Аватар для ROD
 
Регистрация: 30.11.2008
Сообщений: 3,030
По умолчанию

Цитата:
Я где-то слышал что в Windows и Linux могут быть разные размеры типов данных, например вроде бы тип int имеет разный размер в байтах.
По стандарту char 1 байт. short >= char; int => short; long int >= int . В зависимости от платформы (x86, x86-64, arm, avr...) и компилятора short может быть и 8 и 16 бит... ну и далее по списку. На всякий случай приводите к char.


uint32 это, как можно догадаться, безнаказанное целое длинной строго 32 бита. (ведет себя как просто unsigned int, но как бы гарантирует что оно будет длинной 32 бита, вроде штука хорошая, не знаю что про нее стандарт говорит, но gcc о ней знает).
Дилетант широкого профиля.

"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс

Последний раз редактировалось ROD; 01.04.2014 в 23:13.
ROD вне форума Ответить с цитированием
Старый 02.04.2014, 05:43   #4
gunsoy
Форумчанин
 
Регистрация: 30.12.2010
Сообщений: 280
По умолчанию

Ясно, спасибо за помощь.

А вот что касается функций htons() и htonl(), их нужно вызывать и на сервере, и на клиенте? Или только на сервере будет достаточно?
gunsoy вне форума Ответить с цитированием
Старый 03.04.2014, 12:30   #5
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 18,136
По умолчанию

Надо взять высокоуровневый протокол и гонять xml или json.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 04.04.2014, 13:44   #6
gunsoy
Форумчанин
 
Регистрация: 30.12.2010
Сообщений: 280
По умолчанию


Надо взять высокоуровневый протокол и гонять xml или json.


В текстовом виде данные будут весить больше=( Мне нужна скорость.

Правильно ли я понял, что если я буду преобразовывать данные в тип char, то функции htons и т.д. можно не использовать?
gunsoy вне форума Ответить с цитированием
Старый 04.04.2014, 13:54   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Сообщение от gunsoy Посмотреть сообщение

Надо взять высокоуровневый протокол и гонять xml или json.


В текстовом виде данные будут весить больше=( Мне нужна скорость.

Правильно ли я понял, что если я буду преобразовывать данные в тип char, то функции htons и т.д. можно не использовать?
вы не видите разницы между char и u_short?
почитайте справку по функции и поймете нужна она вам или нет.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 19.04.2014, 18:01   #8
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от gunsoy Посмотреть сообщение

Надо взять высокоуровневый протокол и гонять xml или json.


В текстовом виде данные будут весить больше=( Мне нужна скорость.

Правильно ли я понял, что если я буду преобразовывать данные в тип char, то функции htons и т.д. можно не использовать?
В виде блобов по сети гоняют данные фиксированного размера
http://www.cplusplus.com/reference/cstdint/

Или в виде xml. При этом, если возникла необходимость снизить объем трафика, xml перед отправкой сжимают как нибудь zip архиватором.
_Bers вне форума Ответить с цитированием
Старый 19.04.2014, 19:45   #9
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,964
По умолчанию

Цитата:
Надо взять высокоуровневый протокол и гонять xml или json.
Пять - ноль . Как мне из под стола вылезти? Тут, уже никаких слов не хватит...
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача данных по сети Vadiliy Общие вопросы .NET 11 25.02.2014 08:15
Передача данных по сети Imposters Общие вопросы .NET 2 13.10.2012 18:45
Передача данных по сети. Alex Cones Работа с сетью в Delphi 2 06.08.2010 20:55
База данных по сети Berr Работа с сетью в Delphi 2 17.03.2010 21:27
Передача данных по сети. ROD Общие вопросы C/C++ 3 18.06.2009 09:41