6 / 6 / 1
Регистрация: 18.12.2013
Сообщений: 114
|
|||||||||||
1 | |||||||||||
Прием числовых типов по TCP/IP26.05.2014, 17:04. Показов 2666. Ответов 15
Метки нет (Все метки)
Всем привет!!!
В общем на линукс машине есть программа сервера, на моем компе программа клиента. С клиента отправляется массив команд, а сервер на них отвечает. код сервера
Вот код приема:
0
|
26.05.2014, 17:04 | |
Ответы с готовыми решениями:
15
Преобразование числовых типов TCP SO_KEEPALIVE и таймаут на прием Прием сообщений через TCP в 1с Прием данных по протоколу TCP |
6 / 6 / 1
Регистрация: 18.12.2013
Сообщений: 114
|
|
26.05.2014, 18:19 [ТС] | 3 |
Попробовал, не помогло.
0
|
Почетный модератор
11525 / 4320 / 448
Регистрация: 12.06.2008
Сообщений: 12,412
|
||||||
26.05.2014, 19:28 | 4 | |||||
А структуры не используются? Если они используются с одной стороны, то и с другой должна быть точно такая же структура. Дело в том, что переменные внутри структуры выравниваются и их расположение может быть не таким, как ожидалось. Например, при
Добавлено через 2 минуты Я слепой... тут же приведён код клиента. Не заметил вначале.
0
|
770 / 760 / 59
Регистрация: 06.07.2009
Сообщений: 3,021
|
|
27.05.2014, 08:32 | 5 |
Lex999, Поидее должно все правильно отображаться.
Простейший способ прояснить в чем косяк это посмотреть данные побайтово в шестнадцатеричном виде. Посмотри как твои числа выглядят в памяти и сравни (например используя брейкпойт) с тем, что тебе пришло из сокета. Кстати, а в линуксе разве не прямой порядок байт используется? я не помню уже.... Может просто твои числа имеют под виндой обратный порядок байт, вот всякую хрень и выводит.
0
|
136 / 140 / 7
Регистрация: 22.08.2011
Сообщений: 485
|
||||||
27.05.2014, 10:06 | 6 | |||||
Сообщение было отмечено Lex999 как решение
Решение
можно принимать большие куски порций посылок, если где надо переделать размеры и структуры... не уверен заработает ли, но писали выше верно про выравнивания. В своеё версии принимаю большие структуры с даблами без проблем и переворачивааний... Типа всё... Удачи!!!
1
|
6 / 6 / 1
Регистрация: 18.12.2013
Сообщений: 114
|
|
27.05.2014, 11:01 [ТС] | 7 |
solar_wind, Ну у меня две машини на линуксе, просто одна - это миникомпьютер на Archlinux, там CodeSourcery toolchain, а на компе у меня Ubuntu 13.10 и тут клиент на Qt/С++ , так что порядок байт по идее одинаковый должен быть. В любом случае спасибо.
_SASA_, Спасибо, попробую и отпишусь. Добавлено через 31 минуту _SASA_, Да и такой вопрос- я так понимаю что pragma используется только в связке с Microsoft?
0
|
136 / 140 / 7
Регистрация: 22.08.2011
Сообщений: 485
|
|
27.05.2014, 11:13 | 8 |
нет не только - это директива компилятору...
на в примере у меня это запрет на его авто- выравнивание - я же указываю, его до байта. Если увас выравнивание 4 байта, то оно тут и не нужно: 3 дабла =12 - кратно 4, но если у вас выравнивание 8 байт, то тогда будет Ж... Для проверки попробуйте с сервера кинуть 4 дабла и принять их на клиенте, что выйдет?!
0
|
6 / 6 / 1
Регистрация: 18.12.2013
Сообщений: 114
|
|
27.05.2014, 11:53 [ТС] | 10 |
_SASA_, В общем попробовал, все работает без запрета на автовыравнивание как с 4-мя так и с 3-емя даблами, огромнейшее вам спасибо!!!!
Добавлено через 15 минут Dmitriy_M, Ну Big-Endian стоит по умолчанию, да и пробовал я менять порядок байт, впринципи сейчас еще раз попробую чтоб уж точно убедится.
0
|
6 / 6 / 1
Регистрация: 18.12.2013
Сообщений: 114
|
|
27.05.2014, 12:16 [ТС] | 12 |
Ну я только на стороне клиента менял, как я понял на обоих сторонах должны быть одинаковыми?
А не могли бы вы сказать как это правильно на написать?
0
|
6 / 6 / 1
Регистрация: 18.12.2013
Сообщений: 114
|
|
27.05.2014, 12:29 [ТС] | 14 |
Ну тут это для конвертирования integer, а для double как это сделать?
0
|
6 / 6 / 1
Регистрация: 18.12.2013
Сообщений: 114
|
||||||
28.05.2014, 11:09 [ТС] | 16 | |||||
В общем получилось решить свою проблему следующим образом. Как уже писалось выше, с сервера у меня передавались данные в формате порядка LittleEndian. На Ubuntu я принимаю это следующим образом:
0
|
28.05.2014, 11:09 | |
28.05.2014, 11:09 | |
Помогаю со студенческими работами здесь
16
Отправка и прием TCP пакетов Размеры числовых типов данных Создать абстрактный базовый класс для числовых типов TCP прием от клиента: Сервер считывает 21 байт не за раз, а за 7 циклов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |