Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.10.2015, 20:25   #11
Antony41
Пользователь
 
Аватар для Antony41
 
Регистрация: 20.03.2009
Сообщений: 99
По умолчанию

try используются
Antony41 вне форума Ответить с цитированием
Старый 22.10.2015, 21:11   #12
Antony41
Пользователь
 
Аватар для Antony41
 
Регистрация: 20.03.2009
Сообщений: 99
По умолчанию

Процитирую одну из цитат одного форумчанина
Цитата:
Тут все просто. Каждое соединение отрабатывается в своем потоке и использует блокирующие сокеты. Во время работы вызывается метод execute, который отрабатывает(OnExecute)... после его завершения менеджер соединений проверяет, активно ли соединение, опять вызывает execute и так по кругу. Ну так вот, блокирующий сокет плох тем, что при отсутствии данных в буфере, ждет их появления, "подвешивая" поток на этой инструкци (Msg:=AThread.Connection.ReadLn). А поскольку OnExecute "висит" на этой команде, то и менеджер соединений проверить состояние соединения не может. Вы закрываете форму, а у Вас остаются соединения, ждущие данные, отсюда и ошибка.
Я боролся с этим следующим образом: при выключении "сервера" отсылается некое спец-сообщение всем клиентам(BYE), они его "признают" и посылают обратно серверу также некое спец-сообщение(BYE). Сервер отрабатывает инструкцию Msg:=AThread.Connection.ReadLn и, видя BYE, вызывает инструкцию AThread.Connection.Disconnect. Это позволит закрыть соединение и завершить блок OnExecute. А дальше менеджер соединений увидит, что соединение закрыто и больше не будет вызывать метод execute. Вам останется только перед закрытием программы дождаться закрытия всех соединений.

Использование сокетов в Delphi - хорошая статья, мало ли пригодится. Я после её прочтения вообще плюнул на все эти дикие компоненты и стал программировать сокеты напрямую. Smile
Так как я не имею исходников сервера ретрансляции и не могу реализовать данный метод разрыва соединения, то уже начинаю подумывать тоже забить на инди.
Верно ли убеждение? или что можно сделать в таком случае

Последний раз редактировалось Antony41; 22.10.2015 в 21:43.
Antony41 вне форума Ответить с цитированием
Старый 22.10.2015, 22:00   #13
Antony41
Пользователь
 
Аватар для Antony41
 
Регистрация: 20.03.2009
Сообщений: 99
По умолчанию

вот эта штука помогла Server.Scheduler.ActiveYarns.Clear; перед остановом сервера. теперь серв при любых условиях не зависает
Antony41 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужна помощь в понимании программы, написанной на С baltushka Помощь студентам 11 06.10.2011 00:50
Необходима помощь Sambuko Общие вопросы C/C++ 5 21.09.2009 13:20
Необходима помощь mrwhat Фриланс 7 19.05.2009 09:03
Необходима помощь nimf Свободное общение 0 29.08.2007 10:43