|
6 / 6 / 0
Регистрация: 01.08.2011
Сообщений: 133
|
|
Socket: потеря пакетов04.11.2012, 09:23. Показов 5202. Ответов 12
Метки нет (Все метки)
Всем доброго дня. Следующая ситуация:
Я работаю с сокетом асинхронными операциями и пакеты время от времени (не систематически) теряются. Если я тестирую приложение на своем же компьютере, все работает идеально. Начинаю тестировать в локальной сети, сообщения теряются. Разве TCP не наточен на 100% доставку пакетов? Нужно писать код на проверку доставки сообщений или все таки где то у себя ошибся? Программный код не прилагаю из-за его огромности=)
0
|
|
| 04.11.2012, 09:23 | |
|
Ответы с готовыми решениями:
12
Потеря 50% пакетов через роутер и отброс пакетов Потеря соединения TClient Socket - TServer Socket Потеря пакетов |
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
||
| 04.11.2012, 10:40 | ||
|
Могу посоветовать "урезать" код до минимально необходимого для принятия/отправки сообщений и выложить сюда. Предварительно, конечно, проверив - имеется ли потеря пакетов после урезания.
0
|
||
|
6 / 6 / 0
Регистрация: 01.08.2011
Сообщений: 133
|
|
| 04.11.2012, 10:42 [ТС] | |
|
Я попробую. Просто до этого я проверяю на локальном компьютере, все ок.
0
|
|
|
215 / 215 / 20
Регистрация: 18.05.2010
Сообщений: 865
|
||
| 05.11.2012, 14:27 | ||
|
0
|
||
|
6 / 6 / 0
Регистрация: 01.08.2011
Сообщений: 133
|
|||||||
| 05.11.2012, 19:02 [ТС] | |||||||
|
Добавлено через 4 часа 24 минуты Я использую примерно такую схему:
0
|
|||||||
|
7 / 7 / 0
Регистрация: 14.09.2010
Сообщений: 33
|
|
| 07.11.2012, 16:12 | |
|
Пакеты можно легко просохатить, если неграмотно использовать конструкцию try {} catch {}, либо при обрыве-восстановлении соединения (почему бы в локальной сети не наблюдать изредка такую ситуацию?)
Попробуйте поиграться с выдергиванием кабеля в ЛВС, есть потери? По-хорошему, ваша программа должна нормально обрабатывать обрыв соединения, т.к. на практике кратковременные обрывы связи все же бывают.
0
|
|
|
6 / 6 / 0
Регистрация: 01.08.2011
Сообщений: 133
|
|
| 07.11.2012, 16:17 [ТС] | |
|
Все таки имеет смысл писать код, где проверка на достоверную доставку проводится? И по подробнее про "если неграмотно использовать конструкцию try {} catch {}," если не сложно
0
|
|
|
7 / 7 / 0
Регистрация: 14.09.2010
Сообщений: 33
|
|||||||
| 07.11.2012, 16:31 | |||||||
|
Ну, во-первых, TCP - это поток, а не обмен "пакетами"
Может получиться так, что вы шлете команды в поток "сделай_что_то;" "сделай_еще_что_то;" "и_еще;" а асинхронно придет так первый кусок "сделай_что_то;сделай_е" второй кусок "ще_что_то;и_еще;" TCP вам гарантирует, что все придет в том же порядке, но не более. Во-вторых, надо смотреть, какие исключения возникают при работе программы (если вообще возникают) То есть делать так не надо
Мне кажется, в вашем случае проблемно слово "пакет", т.е. вы сами ввели это понятие в протокол TCP, и сами должны обрабатывать эти самые "пакеты". А пакеты находятся на уровне IP, и на уровне TCP управление пакетами недоступно разработчику.
0
|
|||||||
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
|
| 07.11.2012, 16:32 | |
|
Romeo13, выложите полный код этих методов.
Чтобы не гадать.
0
|
|
|
6 / 6 / 0
Регистрация: 01.08.2011
Сообщений: 133
|
||||
| 07.11.2012, 16:36 [ТС] | ||||
|
TCP, если пакеты не были приняты или приняты с ошибками, делает запрос на повторную передачу, в итоге, если собеседник просто отключен, выдает исключение, потому что связь прервана (таймаут вышел) или я не прав?
А про то, что Добавлено через 1 минуту Добавлено через 1 минуту
0
|
||||
|
7 / 7 / 0
Регистрация: 14.09.2010
Сообщений: 33
|
|
| 07.11.2012, 16:38 | |
|
TCP пакеты есть только у системного администратора на файрволе (где он их различает по флагам syn, fin, и прочей ерунде)
У программиста есть TCP Stream, который гарантирует, что выдаст все данные, которые запихали с другого конца, причем вернет их в той же последовательности, либо вернет ошибку. На другом конце, соответственно, гарантирует, все данные, которые отправили в поток, доставлены, либо опять же ошибка. Действительно, выложите код, так сложно судить
0
|
|
|
215 / 215 / 20
Регистрация: 18.05.2010
Сообщений: 865
|
|
| 12.11.2012, 10:29 | |
|
Если на одном конце поток отправился то значит на другом конце он уже получил !!! ТСР это 100% доставка пакетов !!! Никаких состояний обрывов сети обрабатывать не надо, еще раз повторю что если на одном конце он передался то значит на другом конце он уже получил.
0
|
|
|
6 / 6 / 0
Регистрация: 01.08.2011
Сообщений: 133
|
||
| 12.11.2012, 16:18 [ТС] | ||
|
0
|
||
| 12.11.2012, 16:18 | |
|
Помогаю со студенческими работами здесь
13
Потеря CAN пакетов Потеря пакетов Потеря пакетов Потеря пакетов Потеря пакетов Wi-fi Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога
SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
|