Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Про TServerSocket & TClientSocket [D6, WinXP]


Страницы:   1 2

-=RUST=- ©   (2005-01-19 20:54:00) 

У меня после первого моего знакомства с этими компонентами воникла пара вопросов, а именно:
1. При потере соединения TServerSocket с одним из своих TClientSocket возбуждается исключение хотя в событии onError TServerSocket-а прописано закрыть сокет.
2. При потере связи TClientSocket с сервером, после закрытия приложения сервера, этот клиент выругается грязными словами в виде сообщения об ошибке, а когда сервер опять заработает клиент связь не востанавливает (пробовал в дисконект указать ему периодически пытаться восстановить связь не помогло)

Подскажите товарищи пожалуйсто чё тут поделать


Ksandr   (2005-01-27 07:23:00) [1]

Попробовал установить...
Вот что выдал:
One or more the types in the assembly unable to load.

Не принимает. Что делать? Старый Инди из делфи я удалил. Только он был не 9 версии, а 10-ой. 10.00.17
А новый версии 10.00.53


Eraser   (2005-01-26 15:41:00) [2]

Ksandr
В делфи 8 урезанная поставка Indy, притом 9 версии.
Иди на сайт http://www.indyproject.org/и качай полуню бесплатную 10 версию.
Перед тем как устанавливать, ПОЛНОСТЬЮ сотри предыдущую.


Ksandr   (2005-01-26 11:48:00) [3]

Кстати, про Инди... А как им пользоваться. Я в Delphi 8 не нашел сервера Инди. Есть только клиент. Может кто расскажет?


Digitman   (2005-01-26 08:28:00) [4]


> Так вот когда клиент внезапно обрубаеться (типа у компа
> резет нажали :) у сервера возникает событие OnClientError


а если клиент на "другом конце Интернет" ?


> мучаюсь с отправкой файла


бедняга)


Ksandr   (2005-01-26 06:25:00) [5]

Ща вот сижу и тоже делаю сетевую программу на Socket-ах.
Так вот когда клиент внезапно обрубаеться (типа у компа резет нажали :) у сервера возникает событие OnClientError и тут все просто: закрываем сокет и обнуляем код ошибки.
Когда же сервер обрубается подобным образом, то у клиента происходит событие OnError? в котором также просто закрываем сокет и обнуляем код ошибки.
Теперь, чтобы клиент восстановил связь с сервером при включении оного, надо в момент ошибки в клиенте запускать таймер с интервалом к примеру в 5 секунд. И в этом таймере вызывать метод Open. Так как событие OnError у нас уже описано, то никто ругаться не будет, а клиент будет долбиться на сервер до тех пор, пока не подключится или пока его самого не выключат.

Народ, это все пустяки. Я тут мучаюсь с отправкой файла. Кто может пообщаться на эту тему? Мой номер ICQ 170387055


Digitman   (2005-01-22 13:00:00) [6]


> Дармидон   (22.01.05 12:17) [19]


> во-вторых - таких ошибок нет


какихошибок ?
на основании чего ты утверждаешь, что код компонентов TServerSocket & TClientSocket содержит какие-то там ошибки ?


Дармидон   (2005-01-22 12:17:00) [7]

Используйте ICS. Во-первых - открытие исходники, во-вторых - таких ошибок нет.


Digitman   (2005-01-22 12:00:00) [8]


> -=RUST=- ©   (22.01.05 00:17) [17]



> А как на счет востановлении связи клиента с сервером после
> временного отключения сервера?


ну как ? обычным образом - ClientSocket.Open  или ClientSocket.Active := True

только не забывай, что в non-blocking-режиме успешный (т.е. не приведший к исключению) вызов Open или Active НЕ говорит об успешной установке соединения, а говорит о старте операции установления коннекта с сервером .. об успешности ее сообщит событие OnConnect, а о неуспешности - OnError .. в случае неуспешности в обработчике  OnError обязательноследует написать как минимум Socket.Close


-=RUST=-   (2005-01-22 00:17:00) [9]

Ааа, ну убедил, спасибо за объяснение. (А то знакомство то мое первое с этими компонентами)
А как на счет востановлении связи клиента с сервером после временного отключения сервера?


Digitman   (2005-01-21 14:11:00) [10]


> -=RUST=- ©   (21.01.05 13:50) [14]


нет паришь !

сначала ты говоришь


> Сервер выдает ошибку сразу как выключается клиент на удаленной
> тачке


а теперь, выясняется, что сервер все же ДЕЛАЕТ send-вызов, именно после чего собссно и происходит возбуждение события-ошибки

и именно так и должно быть !

отсутствие исключения при вызове send-метода НЕ говорит о том, что указанные тобой данные по завершению метода УЖЕ находятся на стороне приемника ... успешное выполнение send-метода говорит лишь отом , что указанные тобой к передаче данные успешно поставлены в очередь на передачу ... в асинхронном режиме передача очереди является отложенной (pending) операцией, и об ее успехе говорит событие On(Client)Write, а об ее отказе - событие On(Client)Error .. отказ же как раз и м.б. связан с тем фактом, что приемник при приеме данных на своей стороне неожиданно закрыл соединение по своей инициативе, о чем и говорит, кстати, код ошибки 10053


-=RUST=-   (2005-01-21 13:52:00) [11]

kaZaNoVa
на счет апи было бы интересно посмотреть


-=RUST=-   (2005-01-21 13:50:00) [12]

>Digitman: ты мозги нат тут не парь.
>если на стороне сервера нет ни единого вызова send- или receive- метода, то данный отказ ни когда не возникнет.
 
  А я не парю, на сервере есть вызовы метода send, и я не говорил что их там нет,но ошибка обнаруживалась не в момент его(метода) выполнения а как я уже сказал "сразу как выключается клиент на удаленной тачке"

ErrorCode:=0 всё ясно, и с клиентом тоже самое да? (всмысле чтоб при потере связи с сервером клиент периодически пытается её востановить)


Sapersky   (2005-01-21 12:15:00) [13]

Сервер выдает ошибку сразу как выключается клиент на удаленной тачке 'Asunhronus socket error 10053'

Насколько я понял (была подобная проблема), это "нормальное" поведение сокетов... Можно эту ошибку просто игнорировать (ErrorCode:=0), т.к. далее должен сработать OnClientDisconnect (что и требуется в данном случае).


Digitman   (2005-01-21 08:15:00) [14]


> kaZaNoVa ©   (20.01.05 22:07) [11]


> предлагаю Апи-сокеты, могу дать пример


да весь scktcomp.pas - сплошной готовый пример "Апи-сокетов" !
ты что-то новое изобрел в этом плане ?


kaZaNoVa   (2005-01-20 22:07:00) [15]

Digitman ©   (20.01.05 17:17) [6]
я, как всегда, предлагаю Апи-сокеты, могу дать пример ....


Eraser   (2005-01-20 21:36:00) [16]

Verg ©
Я не знаю, а догаадываюсь. Свои догадки я высказал. При таком количестве данных ничего больше сказать не могу. Если автору вопроса интересно- пусть уточнит.


Verg   (2005-01-20 20:19:00) [17]


> Всмысле не компонента, а инизциализация компонентом winsock.
> Видимо проблема с блокирующим/неблокирующим режимом.


Ну, ну, хорошо,... пусть так. Так где конкретно "плохость" инициализации и каким образом это сказывается именно на возникновение исключений типа 'Asunhronus socket error 10053' и  что же конкретно там сделано плохо в этом ключе? Вы же об этом говорите (об этой плохости), значит - знаете...
Нет, ну интересно было бы послушать, просто.


Eraser   (2005-01-20 20:05:00) [18]

Verg ©
Digitman ©

Всмысле не компонента, а инизциализация компонентом winsock. Видимо проблема с блокирующим/неблокирующим режимом.

ЗЫ: Заметье, это вы про Indy первыми начали.


Verg   (2005-01-20 17:37:00) [19]


> Eraser ©   (20.01.05 17:03) [5]
> 'Asunhronus socket error 10053'
> А всё виновата плохая инициализация компонента...


А конкретнее? Где и в чем "плохая"? В контесте данных, конкретных "компонент".
Аргументируйте свои слова - думаю для Вас это будет несложно.

P.S.
Мне бы уже давно осточертело "висеть на дороге" рекламным щитом с натписью "Indy - НАФСИГДА!!!"


Digitman   (2005-01-20 17:17:00) [20]


> виновата плохая инициализация компонента


дурь.


> Советую использовать другие компоненты или чистый API


а что еще от Eraser'а ожидать ? сейчас начнет со своим Инди аки курица с яйцом носиться).. якобы Инди - панацея ото всех бед)


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо