Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Размер данных присылаемых по TCP в си.
|
|||
|---|---|---|---|
|
#18+
Добрый день. Как определить в языке си размер данных приходящих по TCP протоколу? В данных передаваемых по протоколу размер передаётся только для одного блока, а таких блоков неизвестно сколько приходит, каких -то символов конца прихода данных не передаётся. Программа, которая передаёт эти данные сторонняя, изменить её не могу. Ну например же программа wireshark как-то это делает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2015, 13:24 |
|
||
|
Размер данных присылаемых по TCP в си.
|
|||
|---|---|---|---|
|
#18+
roma1975таких блоков неизвестно сколько приходит, каких -то символов конца прихода данных не передаётся Ну так читай блоки пока коннект не закроется. roma1975Ну например же программа wireshark как-то это делает. Wireshark работает на уровне пакетов. Поток данных может быть разделён на пакеты в произвольном месте. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2015, 13:28 |
|
||
|
Размер данных присылаемых по TCP в си.
|
|||
|---|---|---|---|
|
#18+
В общем случае - никак. TCP это просто поток байт без начала и конца. TCP гарантирует только что байты придут в том же порядке в котором были отправлены. Размеры блоков данных должны указываться внутри данных. Или какие-то маркеры начала и конца блока данных. Читай документацию к той проге которая передает. Там все должно быть описано. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2015, 13:33 |
|
||
|
Размер данных присылаемых по TCP в си.
|
|||
|---|---|---|---|
|
#18+
И как это сделать если можно на примере. У меня такой пример. Он не устраивает поскольку учитывает размер одного блока, а нам за раз, может приходить много блоков: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2015, 13:40 |
|
||
|
Размер данных присылаемых по TCP в си.
|
|||
|---|---|---|---|
|
#18+
И теряется часть информации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2015, 13:41 |
|
||
|
Размер данных присылаемых по TCP в си.
|
|||
|---|---|---|---|
|
#18+
Программа wialon retnslator там написано, что в блоке передаётся размер в первых 4 байтах, а блоков таких может и 1 и 2 и 3 , а может и больше быть из программы wireshark. Если не учесть все блоки то по ним информация может потеряться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2015, 13:45 |
|
||
|
Размер данных присылаемых по TCP в си.
|
|||
|---|---|---|---|
|
#18+
Тут пример 18334280 там весь топик про тот же виалон ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2015, 13:50 |
|
||
|
Размер данных присылаемых по TCP в си.
|
|||
|---|---|---|---|
|
#18+
roma1975И как это сделать если можно на примере. У меня такой пример. Он не устраивает поскольку учитывает размер одного блока, а нам за раз, может приходить много блоков: Код: plaintext 1. 2. 3. 4. Мой исходный пример 18334280 был как раз на любое количество блоков, но ТС добавил break и стало работать только с одним блоком. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2015, 13:54 |
|
||
|
Размер данных присылаемых по TCP в си.
|
|||
|---|---|---|---|
|
#18+
Да это был я, сейчас я зарегистрировался и имя это взял. Ну давай я уберу break; Может действительно поможет. Спасибо попробую. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2015, 14:03 |
|
||
|
Размер данных присылаемых по TCP в си.
|
|||
|---|---|---|---|
|
#18+
Я сейчас сделал так. Почему -то не всегда отрабатывает строка когда блоки заканчиваются Код: plaintext 1. 2. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2015, 13:06 |
|
||
|
Размер данных присылаемых по TCP в си.
|
|||
|---|---|---|---|
|
#18+
И буду дальше тестировать программу как она ловит данные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2015, 13:08 |
|
||
|
Размер данных присылаемых по TCP в си.
|
|||
|---|---|---|---|
|
#18+
roma1975Я сейчас сделал так. Почему -то не всегда отрабатывает строка когда блоки заканчиваются Код: plaintext 1. 2. Если соединение открыто, но данных из него не поступает, то программа будет стоять на recv() до тех пор пока что-нибудь не придет или соединение не будет закрыто с другой стороны или порвется. Ты что хочешь получить? Как по твоему должно работать? PS Правильно так написать Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2015, 13:16 |
|
||
|
Размер данных присылаемых по TCP в си.
|
|||
|---|---|---|---|
|
#18+
Так хотелось бы, чтобы программа работала так: считала все блоки данных, которые за раз от ретранслятора поступают мне - это программа делает, когда блоки закончились программа должна выйти из циклов, но почему -то выход Код: plaintext 1. 2. 3. не всегда отрабатывает и программа из цикла может не выйти, почему не знаю, сейчас пробую наблюдать за реальными приходящими данными выход из циклов: Код: plaintext 1. 2. 3. 4. 5. 6. ниже у меня идет переоткрытие сокета Код: plaintext 1. 2. 3. а выше циклов идёт Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2015, 13:37 |
|
||
|
Размер данных присылаемых по TCP в си.
|
|||
|---|---|---|---|
|
#18+
Ну а вообще мне нужно все приходящие данные получать по протоколу wialonretranslator и чтобы программа могла их все принять, не пропускала. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2015, 13:50 |
|
||
|
Размер данных присылаемых по TCP в си.
|
|||
|---|---|---|---|
|
#18+
А ну да ты написал, что может оставаться на recv пока что-нибудь не придет или соединение не будет закрыто с другой стороны или порвется. Видать там не закрывается соединение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2015, 13:56 |
|
||
|
Размер данных присылаемых по TCP в си.
|
|||
|---|---|---|---|
|
#18+
roma1975Видать там не закрывается соединение. А это значит, что могут приходить пакеты данных ещё и ещё. Если ты хочешь принять их все, без пропусков, тебе надо ждать пока они не придут. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2015, 14:13 |
|
||
|
Размер данных присылаемых по TCP в си.
|
|||
|---|---|---|---|
|
#18+
Ну вроде она так сейчас и делает, ну посмотрим в реальности как оно будет дальше, просто может получиться так, как я вот сейчас проверял у себя подавая данные на порт и не закрывая соединение, если не происходит закрытие соединения передающей стороной, то последующие данные не принимаются принимающей стороной пока не произойдёт отсоединение передающей стороны. А это плохо неизвестно когда передающая сторона отсоединиться, сколько она всего накопит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2015, 14:22 |
|
||
|
Размер данных присылаемых по TCP в си.
|
|||
|---|---|---|---|
|
#18+
roma1975, дык приходящий поток надо парсить, а не складировать. Иначе будут глюки, тормоза, нарушения функционирования при других условиях работы и прочие старинные, распространённые грабельки... для садо-мазо. тот кто ищет пакеты в потоковом протоколе ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2015, 01:16 |
|
||
|
Размер данных присылаемых по TCP в си.
|
|||
|---|---|---|---|
|
#18+
Да всё нормально, я тут сам ошибся. Просто я запускал несколько программ передающих данных по одному порту, и смотрю почему же по позже запущенной программе принимающая программа не принимает данные. Так ведь программа будет принимать данные только от соединения первого с первой программы и это правильно, нормально. Чтобы принимались и с других соединений данные нужно строить мультипотоковый какой-то приём. Сейчас для проверки правильности приёма данных программой сделал посылку вторых данных в одной программе с задержкой, нормально приняла программа. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2015, 07:39 |
|
||
|
Размер данных присылаемых по TCP в си.
|
|||
|---|---|---|---|
|
#18+
roma1975Добрый день. Как определить в языке си размер данных приходящих по TCP протоколу? В данных передаваемых по протоколу размер передаётся только для одного блока, а таких блоков неизвестно сколько приходит, каких -то символов конца прихода данных не передаётся. Программа, которая передаёт эти данные сторонняя, изменить её не могу. Ну например же программа wireshark как-то это делает. Wireshark нельзя брать за образец TCP-приложения. Перед ней ставились задачи далеко идущие за TCP-протокол (правильнее сказать что она охватывает более глубокий стек и видит больше). Под Windows в частности Wireshark устанавливает нестандартный драйвер чтобы видеть больше сведений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2015, 09:20 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=39096604&tid=2018757]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
186ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
| others: | 14ms |
| total: | 295ms |

| 0 / 0 |
