![]() |
|
Модераторы: Snowy, Poseidon, MetalFan |
![]()
|
|
| dimokx87 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 27.11.2009 Репутация: нет Всего: нет |
Помогите пожалуйста!
Использую компонент TServerSocket, подключаются несколько клиентов, всё отлично работает. Но если выключить один из клиентов не разъединив соединение (например через диспетчер задач), то на сервере вылетает ошибка 10053, при этом сервер думает, что тот клиент ещё подключен. Что нужно сделать? |
|||
|
||||
| Демо |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 3.11.2005 Репутация: 3 Всего: 50 |
Ну видимо просто обработать эту ошибку (WSAECONNABORTED (10053))? -------------------- |
|||
|
||||
| dimokx87 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 27.11.2009 Репутация: нет Всего: нет |
Подскажи пожалуйста как это сделать.
|
|||
|
||||
| kami |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 6 Всего: 72 |
Минимальный обработчик события OnError на серверном и клиентском сокете должен состоять из:
|
|||
|
||||
| dimokx87 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 27.11.2009 Репутация: нет Всего: нет |
ErrorCode:=0; это у меня и так стоит, а Socket.Close; мне не нужно. Мне нужно, чтобы список пользователей обновился.
|
|||
|
||||
| kami |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 6 Всего: 72 |
Тогда без комментариев. Только не удивляйтесь, что пошли утечки. При "неправильном" разрыве соединения (прерывание процесса, разрыв соединения с помощью TCPView) "второму концу" это не сообщается. И узнает он о том, что соединение уже не живое только при попытке что-либо отправить в сокет. Именно в этот момент возникнет ошибка, которая должна быть обработана в OnError. Если ошибка все равно "вылезает", значит она не обработана, ибо исключение при ErrorCode=0 не возникает.
В догонку - при ошибке соединения его нужно закрыть установленным порядком. |
|||
|
||||
| dimokx87 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 27.11.2009 Репутация: нет Всего: нет |
Не могу понять. Значит закрытие сокета обязательно и придётся очистить список подсоединенных клиентов, а потом подключать всех заново?
|
|||
|
||||
| kami |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 6 Всего: 72 |
Видимо, Вы не правильно понимаете основы работы компонентов TClient|TServerSocket. Команда Socket.Close, вызванная в одном из обработчиков событий этих компонентов приведет только к закрытию соединения, инициировавшего это событие. Говоря более простым языком - закроется только одно из соединений с клиентами. Только то, которое инициировало событие. На остальные соединения это никак не повлияет. Не нужно путать ServerSocket.Socket, который является слушающим сокетом с ServerSocket.Socket.Connections[i], которые являются активными сокетами, обслуживающими только свои соединения. В события компонентов передается именно один из ServerSocket.Socket.Connections[i] |
|||
|
||||
| dimokx87 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 27.11.2009 Репутация: нет Всего: нет |
Всё работает!!!
ОГРОМНОЕ спасибо kami! Как я понял Socket.Close вызывает выполнение disconect. |
|||
|
||||
| kami |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 6 Всего: 72 |
||||
|
||||
![]()
|
| Правила форума "Delphi: Сети" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делится вскрытыми компонентами
Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Сети | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |