![]() |
|
Модераторы: Snowy, Poseidon, MetalFan |
![]()
|
|
| Coder |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 733 Регистрация: 13.12.2004 Репутация: нет Всего: 11 |
как правильно отключить клиента, а так же понять что все данные от него приняты?
// код клиента
проблема вот в чем, при попытке отослать данные серверу у клиента начинают вываливаться ошибки (но данные все же отсылаются - их видно в Мемо сервера): An existing connection was forcibly closed by the remote host. и Connected Closed . Из текста ощибок подозреваю что дело в не правильном закрытии подключения. |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 53 Всего: 484 |
Ну ты ж с сокетом работаешь.
Всегда нужно приём/отправку ставить в try except. Как на сервере, так и на клиенте. |
|||
|
||||
| Coder |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 733 Регистрация: 13.12.2004 Репутация: нет Всего: 11 |
Snowy, т.е. эти ошибки можно считать "нормальными"?
|
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 53 Всего: 484 |
Да, ибо обрыв связи - это исключительная ситация.
Её нужно обрабатывать. |
|||
|
||||
| x77 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1255 Регистрация: 25.3.2002 Репутация: 1 Всего: 22 |
лучше пользоваться Indy, который сам контролирует целостность, и безо всяких исключений. а если уж делать на сокетах, то перед отправкой имеет смысл высчитать длину отправляемого сообщения и отправить серверу сначала эту длину. сервер её считывает и дальше продолжает читать, пока не вычитает всё либо не вылетит по тайму.
-------------------- Я никогда не сопротивлялся искушению, поскольку узнал: что мне не нравится, то меня не искушает. © Джордж Бернард Шоу (Ирландия) |
|||
|
||||
| Coder |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 733 Регистрация: 13.12.2004 Репутация: нет Всего: 11 |
а как задать длину сообщения?
|
|||
|
||||
| x77 |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1255 Регистрация: 25.3.2002 Репутация: 1 Всего: 22 |
Coder, Length (s)
Добавлено @ 14:45 кусок из рабочего проекта. клиент:
сервер:
здесь сервер висит в сервисе, и является не-блокирующим, а вот клиент - блокирующий, и после каждого вызова он ждёт ответа, не возвращая управления. для этого на клиенте и создаётся поток. -------------------- Я никогда не сопротивлялся искушению, поскольку узнал: что мне не нравится, то меня не искушает. © Джордж Бернард Шоу (Ирландия) |
||||
|
|||||
| x77 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1255 Регистрация: 25.3.2002 Репутация: 1 Всего: 22 |
собственно, в такой раскладке - неблокирующий сервер + блокирующий клиент - в конце работы я даже не говорю Close или там Active := FALSE. ClientSocket и его поток для чтения создаются динамически, потом тупо освобождаются. никаких исключительных ситуаций нигде не возникает, уж не знаю почему.
-------------------- Я никогда не сопротивлялся искушению, поскольку узнал: что мне не нравится, то меня не искушает. © Джордж Бернард Шоу (Ирландия) |
|||
|
||||
![]()
|
| Правила форума "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. |