Форум программистов, компьютерный форум CyberForum.ru
CyberForum.ru - форум программистов и сисадминов > > >
Восстановить пароль Регистрация
 
Natrv
Новичок
1 / 1 / 0
Регистрация: 06.01.2011
Сообщений: 23
01.06.2011, 19:27     UDP Socket Error 10054. Есть решение. Нужно только поймать исключение.   #1
Всем привет. В кратце есть Инди UDPServer с него шлю сообщения на определённый адрес.Если послать сообщение на не существующий адрес в сети то в отладчики борланда будет выдано исключение ошибка сокета 10054. Если сделать уже все эти действия не с отладчика а напрямую скомпилировав экзешник и запустив, то исключение не выдается.Я всячески пытался поймать исключение причем исключение ставил на отправку (функция Send()) и где то прочитал что исключения возникает абсолютно не в функции отправки а где то внутри кода при приеме. Просто при посылке данных если на той стороне не открыт сокет на прием моему компу посылается сообщение "ошибка" и он получая его дает исключение 10054 недоступность сокета или что то подобное. Так вот если запускать экзешник посылать на не существующий адрес то как я говорил исключение не выдается, но после этого компонент просто становится в нехорошую позу и не посылает больше ничего пока не выйдешь из программы и заново ее не запустишь. Было найдено решение этой программы. Что бы не перезапускать прогу достаточно выполнить код
Код C++
1
UDPServer->Active = false; UDPServer->Bindings->Clear(); UDPServer->Active = true;
Если выполнить данное действие прога реанимируется и все прекрассно шлет. То есть решение взять таймер на 500мс и каждые 500 мс выполнять код который выше. Но это через одно место, а хочется по нормальному. Просьба помогите поймать исключение. Заранее всем спасибо.
AdAgent
Объявления
01.06.2011, 19:27    UDP Socket Error 10054. Есть решение. Нужно только поймать исключение.
AntonChik
Форумчанин
1072 / 570 / 19
Регистрация: 11.11.2008
Сообщений: 1,539
02.06.2011, 05:37     UDP Socket Error 10054. Есть решение. Нужно только поймать исключение.   #2
имеется в виду TIdUDPServer? если да, то какая версия Indy?
проект в студию можно?
kzru_hunter
Форумчанин
919 / 652 / 34
Регистрация: 01.02.2011
Сообщений: 1,542
Записей в блоге: 1
02.06.2011, 06:02     UDP Socket Error 10054. Есть решение. Нужно только поймать исключение.   #3
Natrv У меня тоже эта проблема была, перешел из-за этого на TNMUDP. 10054 ловится в самом начале обработчика приёма пакетов с помощью WSAGetLastError
Natrv
Новичок
1 / 1 / 0
Регистрация: 06.01.2011
Сообщений: 23
02.06.2011, 09:03  [ТС]     UDP Socket Error 10054. Есть решение. Нужно только поймать исключение.   #4
Доброе утро. Версия 8.0.25. Если не ошибаюсь kzru_hunter я читал вашу тему и видел что вы перебрались на тот компонент.Но все таки хочется решить проблему. Чувствую нутром что это сам инди виноват. Но даже не знаю билдер ловит прога нет 8(
Вложения
Тип файла: rar socket10054.rar (24.9 Кб, 109 просмотров)
AntonChik
Форумчанин
1072 / 570 / 19
Регистрация: 11.11.2008
Сообщений: 1,539
02.06.2011, 11:24     UDP Socket Error 10054. Есть решение. Нужно только поймать исключение.   #5
как ни прискорбно, но виноват сам инди. 8 версия глюкавая.
сам в свое время помаялся с подобными глюками.
всё заработало и пошло как по маслу только, когда установил bds2006 с Indy версии то ли 9, то ли 10, не припомню.

p.s. а вообще еще вот интересно зачем пытаться с сервака отправить что-то на несуществующий ip, точнее на хост, с которым не установлено соединение? инициатором по идее должен быть клиент.
AdAgent
Объявления
02.06.2011, 11:24    UDP Socket Error 10054. Есть решение. Нужно только поймать исключение.
Natrv
Новичок
1 / 1 / 0
Регистрация: 06.01.2011
Сообщений: 23
02.06.2011, 11:42  [ТС]     UDP Socket Error 10054. Есть решение. Нужно только поймать исключение.   #6
Ясно. Спасибо Вам за помощь буду пытаться обновлять инди. То что клиент должен слать это я знаю. А зачем слать на не существующий айпишник поясню. Пытаемся отослать сообщение клиенту зная его айпишник а он в этот момент прогу закрыл или комп перезагрузил и все компонент встал Всем спасибо
AntonChik
Форумчанин
1072 / 570 / 19
Регистрация: 11.11.2008
Сообщений: 1,539
02.06.2011, 12:11     UDP Socket Error 10054. Есть решение. Нужно только поймать исключение.   #7
Цитата Сообщение от Natrv Посмотреть сообщение
Пытаемся отослать сообщение клиенту зная его айпишник а он в этот момент прогу закрыл или комп перезагрузил и все компонент встал
однако в очень редких случаях, лишь при аварийных падениях клиент не успевает сообщить серваку что отцепился.
я про то что прежде чем бездумно делать Send непонятно вообще на какой IP-шник (откуда ты его берешь?) можно пробить через Bindings на связи этот ip вообще или нет.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.06.2011, 15:21    UDP Socket Error 10054. Есть решение. Нужно только поймать исключение.

Еще ссылки по теме:

C++ Builder Программирование Udp socket в билдере

C++ Builder Ошибка: Asynchronous socket error 10061

C++ Builder Server Socket, Asynchronous socket error 10053

Natrv
Новичок
1 / 1 / 0
Регистрация: 06.01.2011
Сообщений: 23
02.06.2011, 15:21  [ТС]     UDP Socket Error 10054. Есть решение. Нужно только поймать исключение.   #8
Вообщем это типа удаленный админ я делаю. Так вот у меня в проге есть список контактов и есть список серверов. Я решил делать несколько серверов, а не один но очень часто часть серваков в сети а часть нет, вот откуда не существующие айпишники. Так вот прога опрашивает сервер получает свой айпи загружает контакт лист и опрашивает у сервака айпишники юзеров контакт листа. Все хорошо и можно делать бинд как вы говорите перед каждой посылкой. Но есть также звонилка как в скайпе передача видоозвонка и там постоянно по юдп я шлю сендом данные. вот там как раз пробивать перед отсылкой данных в сети или не в сети юзер наверное будет не очень правильно!? т.к. шлю я очень часто. но все равно спасибо про бинд я и не думал что можно замутить
Yandex
Объявления
02.06.2011, 15:21    UDP Socket Error 10054. Есть решение. Нужно только поймать исключение.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать новую тему
Опции темы

Текущее время: 17:49. Часовой пояс GMT +4.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.7 PL3
Copyright ©2000 - 2014, vBulletin Solutions, Inc.