|
2 / 2 / 0
Регистрация: 22.09.2013
Сообщений: 219
|
||||||||||||||||
Как только происходит попытка создать сокет для UDP - сокет TCP сразу ломается (выдает 10093).01.02.2016, 09:58. Показов 3928. Ответов 13
Метки нет (Все метки)
Добрый день.
Пытаюсь сделать соединение, использующее два канала обмена данными - TCP для управления в режиме клмиента, и UDP - для приема данных в режиме сервера. Собственно код выглядит так: Инициализация для TCP:
При запуске соединение TCP работает и управление собственно тоже - как запись, так и прием. Как только происходит попытка создать сокет для UDP - сокет TCP сразу ломается (выдает 10093). И подобное происходит при каждой попытке установить UDP соединение. Причем когда я UDP инициализировал как клиент - все работало без сбоев (в плане TCP сокета). Но меня интересует именно режим сервера. Подскажите в чем может быть проблема и как ее поправить. Добавлено через 5 часов 19 минут Пробовал делать так:
Добавлено через 1 минуту Думаю надо как то еще настроить... Если поможет - TCP соединяется с одним адресом, например 10.0.0.2, а UDP с другим, например 10.0.0.3... Добавлено через 12 часов 0 минут с bind понял - нужно установить либо INADDR_ANY, либо локальный адрес карты, либо 127.0.0.1 . Но это в любом случае не помогло бы, думаю при инициализации нужно как то ограничить ip-адреса, с которых принимаются данные, т.е. для TCP это прописано, т.к. это клиент, возможно нужно сделать так же для UDP, оставив его при этом сервером.
0
|
||||||||||||||||
| 01.02.2016, 09:58 | |
|
Ответы с готовыми решениями:
13
Один сокет для TCP и UDP TCP сокет: доходит только каждое пятое сообщение Как часто можно открывать TCP сокет? |
|
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
|
||||
| 01.02.2016, 10:06 | ||||
|
1
|
||||
|
2 / 2 / 0
Регистрация: 22.09.2013
Сообщений: 219
|
||||||
| 01.02.2016, 11:12 [ТС] | ||||||
|
Да, Вы правы. Спасибо.
Перенес WSAStartup() в конструктор, стало лучше. Теперь при начальном запуске оба сокета подхватываются и работают совместно. Осталась проблема с реинициализацией. Т.е. когда я во время работы приложения делаю рестарт соединений - происходит следующее: 1) Для UDP соединения происходят функции stop, установка новых настроек (ip, port) и затем start; 2) Для TCP соединения делаю reinit - удаляю класс и вызываю конструктор заново с новыми настройками (ip,port). После этого устанавливается только одно соединение, а второе не запускается. Причем заранее непонятно какое включится, а какое - нет (возможно связано с тем - кто первый инициализируется). С чем это может быть связано? Собственно коды конструкторов и функции stop привел ниже. Они совпадают для обоих соединений.
Может проблема быть в том что WSAStartup вызывается для обоих соединений?
0
|
||||||
|
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
|
|||
| 01.02.2016, 11:14 | |||
|
опять же
Добавлено через 59 секунд
0
|
|||
|
2 / 2 / 0
Регистрация: 22.09.2013
Сообщений: 219
|
||||||
| 01.02.2016, 12:04 [ТС] | ||||||
|
Сделал.
Теперь при реинициализации соединение устанавливается в обоих случаях. Но для TCP не всегда сразу - иногда с 5-6 попытки. Правильно выставлен параметр SO_REUSEADDR?
Вру, при первой реинициализации TCP встает сразу практически. После второй - приходится очень долго ждать. Реинициализации делаю последовательно с промежутком секунд в 15-30. Добавлено через 2 минуты Собственно засек по времени - почему то соединяется через минуту после предыдущего соединения.
0
|
||||||
|
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
|
|
| 01.02.2016, 12:15 | |
|
0
|
|
|
2 / 2 / 0
Регистрация: 22.09.2013
Сообщений: 219
|
||||||
| 01.02.2016, 12:35 [ТС] | ||||||
|
Со стороны клиента
Добавлено через 2 минуты Есть параметр TCP alive check timeout. И у него пределы 1-99 мин. Но там выставлено 7, а реконнект ждет 1 мин. Поэтому думаю что это не то.
0
|
||||||
|
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
|
|||
| 01.02.2016, 14:50 | |||
|
setsockopt
Добавлено через 45 секунд
0
|
|||
|
2 / 2 / 0
Регистрация: 22.09.2013
Сообщений: 219
|
|||||||
| 01.02.2016, 15:00 [ТС] | |||||||
|
Собственно не проходит условие
0
|
|||||||
|
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
|
||
| 01.02.2016, 23:35 | ||
|
0
|
||
|
2 / 2 / 0
Регистрация: 22.09.2013
Сообщений: 219
|
||||||
| 02.02.2016, 10:05 [ТС] | ||||||
|
Т.е. как то так?
0
|
||||||
|
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
|
||||||
| 02.02.2016, 10:44 | ||||||
1
|
||||||
|
2 / 2 / 0
Регистрация: 22.09.2013
Сообщений: 219
|
|
| 02.02.2016, 10:48 [ТС] | |
|
Понял, спасибо)) Буду пробовать сейчас, что-то забыл на эту функцию проверку добавить.
0
|
|
|
50 / 49 / 10
Регистрация: 24.01.2010
Сообщений: 225
|
|
| 04.02.2016, 16:18 | |
|
и ещё...
в строке 190, у Вас будет вылет в случае коллизий в сети, ударных нагрузок на сервак, при потере пакетов в сети и прочей фигни из реальной жизни. Причина банальна - в TCP нет пакетной передачи(для клиента сокета, коим Вы и являетесь). И иногда ваша длина принятых данных будет равняться меньше чем 128 байт...Редко но будет... чтоб было понятнее...В TCP возможно следующая картина: клиент отправляет 1000+300+500+200 байт сервер получает 100+1800+50+50 прочувствуйте ситуацию... удачи, она Вам потребуется (круглый)
0
|
|
| 04.02.2016, 16:18 | |
|
Помогаю со студенческими работами здесь
14
Как через UDP сокет соединить трёх клиентов без сервера? Материнка 775 сокет и процессор 771 сокет, Совместимость 4 планки Apacer DDR3 по 4Gb/1333MHz от старой МВ сокет 775 могу ли я их использовать на сокет 2011 UDP сокет. Ошибка в программе. Производительность Try-Catch в Сокет UDP Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога
Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
|