Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/25: Рейтинг темы: голосов - 25, средняя оценка - 4.76
6 / 6 / 0
Регистрация: 01.08.2011
Сообщений: 133

Socket: потеря пакетов

04.11.2012, 09:23. Показов 5202. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго дня. Следующая ситуация:
Я работаю с сокетом асинхронными операциями и пакеты время от времени (не систематически) теряются. Если я тестирую приложение на своем же компьютере, все работает идеально. Начинаю тестировать в локальной сети, сообщения теряются.
Разве TCP не наточен на 100% доставку пакетов? Нужно писать код на проверку доставки сообщений или все таки где то у себя ошибся?

Программный код не прилагаю из-за его огромности=)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.11.2012, 09:23
Ответы с готовыми решениями:

Потеря 50% пакетов через роутер и отброс пакетов
Добрейшего времени суток , имеется проблема - потеря пакетов стремящаяся к 50% через роутер (eltex NTU-RG-1402G-W),выглядит это сначала как...

Потеря соединения TClient Socket - TServer Socket
После коннекта клиента к серверу минут 20 соединение живёт и клиенты получают сообщения через длительное время они перестают получать...

Потеря пакетов
Начались потери пакетов в онлайн игре. Лаги, плохо работает. Сделал тест соединения. Я не специалист, но вроде бы потери происходят на...

12
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
04.11.2012, 10:40
Цитата Сообщение от Romeo13 Посмотреть сообщение
все таки где то у себя ошибся
Вот это.

Могу посоветовать "урезать" код до минимально необходимого для принятия/отправки сообщений и выложить сюда.
Предварительно, конечно, проверив - имеется ли потеря пакетов после урезания.
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
Цитата Сообщение от Romeo13 Посмотреть сообщение
Разве TCP не наточен на 100% доставку пакетов
верно, 100% доставка гарантирована !!! я работаю с сокетами и никогда пакеты не терялись
0
6 / 6 / 0
Регистрация: 01.08.2011
Сообщений: 133
05.11.2012, 19:02  [ТС]
Цитата Сообщение от Башир Посмотреть сообщение
верно, 100% доставка гарантирована !!! я работаю с сокетами и никогда пакеты не терялись
Спасибо, это облегчает мою учесть.

Добавлено через 4 часа 24 минуты
Я использую примерно такую схему:
C#
1
2
3
4
5
6
7
8
9
10
11
void Receiver()
{
      Socket.BeginReceive( ..., Receive );
}
 
void Receive(IAsyncResult Result)
{
       Socket.EndRecieve( Result );
       ........
       Reciever();
}
Это нормальный подход? Тут я все утрировано написал, все ошибки я отлавливаю и т.д. так что гарантированно если Recieve выполняется то и Reciever выполнится.
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 вам гарантирует, что все придет в том же порядке, но не более.


Во-вторых, надо смотреть, какие исключения возникают при работе программы (если вообще возникают)

То есть делать так не надо

C#
1
2
3
4
5
try
{
// код
}
catch (Exception e) {}
Добавлено через 2 минуты
Цитата Сообщение от Romeo13 Посмотреть сообщение
Все таки имеет смысл писать код, где проверка на достоверную доставку проводится?
протокол TCP либо выполнит доставку, либо выдаст ошибку. Это и есть проверка.

Мне кажется, в вашем случае проблемно слово "пакет", т.е. вы сами ввели это понятие в протокол TCP, и сами должны обрабатывать эти самые "пакеты". А пакеты находятся на уровне IP, и на уровне TCP управление пакетами недоступно разработчику.
0
Эксперт .NET
 Аватар для kolorotur
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, если пакеты не были приняты или приняты с ошибками, делает запрос на повторную передачу, в итоге, если собеседник просто отключен, выдает исключение, потому что связь прервана (таймаут вышел) или я не прав?

А про то, что

Цитата Сообщение от Vaso Посмотреть сообщение
То есть делать так не надо
И коню понятно=) я ошибки по-другому отлавливаю

Добавлено через 1 минуту
Цитата Сообщение от Vaso Посмотреть сообщение
Мне кажется, в вашем случае проблемно слово "пакет", т.е. вы сами ввели это понятие в протокол TCP, и сами должны обрабатывать эти самые "пакеты". А пакеты находятся на уровне IP, и на уровне TCP управление пакетами недоступно разработчику.
Насколько я знаю, TCP разбивает сообщение на пакеты и передает их, где в конечной точке они собираются, недостающие запрашиваются.

Добавлено через 1 минуту
Цитата Сообщение от kolorotur Посмотреть сообщение
Romeo13, выложите полный код этих методов.
Чтобы не гадать.
Это готовая программа, долго трудно и нудно будет сокращать) я решил на скорую руку без отдельного написания библиотек сделать.
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  [ТС]
Цитата Сообщение от Башир Посмотреть сообщение
Если на одном конце поток отправился то значит на другом конце он уже получил !!!
Отправка производится синхронно, т.е. Socket.Send(), и я более чем уверен что она точно производится, просто там немного блоков кода отправки. Да и если бы синхронная операция встала я бы об этом узнал.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.11.2012, 16:18
Помогаю со студенческими работами здесь

Потеря CAN пакетов
Добрый день. У меня есть STM32F4 подключенный к линуксу по шине CAN. Линукс посылает команды а stm их выполняет. Также линукс постоянно...

Потеря пакетов
У меня настроен интернет через VPN (так как живу в общежитии). ОС: Win7. Проблема в том, что у меня подвисает интернет, хотя раньше...

Потеря пакетов
Такая проблема. Начал подлагивать интернет, через командную строку проверил потерю пакетов. Выяснилось, что стабильно, интервалом...

Потеря пакетов
Здравствуйте, недавно обнаружил у себя такое явление, как потеря пакетов (при помощи программы ping plotter). Как можно вылечить?

Потеря пакетов Wi-fi
Ноут asus rog g751j Роутер tp-link tl-wr841n(новый, настроен и работает нормально) Скорость соединения через вайфай 30/30, скорость...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
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(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru