Форум: "Сети";
Текущий архив: 2005.03.27;
Скачать: [xml.tar.bz2];
ВнизПро TServerSocket & TClientSocket Найти похожие ветки
← →
-=RUST=- © (2005-01-19 20:54) [0]У меня после первого моего знакомства с этими компонентами воникла пара вопросов, а именно:
1. При потере соединения TServerSocket с одним из своих TClientSocket возбуждается исключение хотя в событии onError TServerSocket-а прописано закрыть сокет.
2. При потере связи TClientSocket с сервером, после закрытия приложения сервера, этот клиент выругается грязными словами в виде сообщения об ошибке, а когда сервер опять заработает клиент связь не востанавливает (пробовал в дисконект указать ему периодически пытаться восстановить связь не помогло)
Подскажите товарищи пожалуйсто чё тут поделать
← →
Digitman © (2005-01-20 08:24) [1]
> При потере соединения
"потеря соединения" может быть обнаружена ТОЛЬКО в ходе выполнения операций приема или передачи
> выругается грязными словами в виде сообщения об ошибке
и ты, конечно же, стесняешься процитировать здесь эти "грязные слова" ? или буквы там незнакомые, в сообщении об ошибке ?
← →
-=RUST=- © (2005-01-20 15:20) [2]Нет. Сервер выдает ошибку сразу как выключается клиент на удаленной тачке.
А процетировать, да да конечно: "Asunhronus socket error 10053"
(это сервер выплевывает)
← →
Verg © (2005-01-20 15:40) [3]В обработчике OnError var параметр ErrorCode обнулил ?
← →
Digitman © (2005-01-20 15:47) [4]
> -=RUST=- © (20.01.05 15:20) [2]
> Сервер выдает ошибку сразу как выключается клиент на удаленной
> тачке
ты мозги нат тут не парь.
если на стороне сервера нет ни единого вызова send- или receive- метода, то данный отказ никогда не возникнет.
← →
Eraser © (2005-01-20 17:03) [5]"Asunhronus socket error 10053"
А всё виновата плохая инициализация компонента...
Советую использовать другие компоненты или чистый API.
← →
Digitman © (2005-01-20 17:17) [6]
> виновата плохая инициализация компонента
дурь.
> Советую использовать другие компоненты или чистый API
а что еще от Eraser"а ожидать ? сейчас начнет со своим Инди аки курица с яйцом носиться).. якобы Инди - панацея ото всех бед)
← →
Verg © (2005-01-20 17:37) [7]
> Eraser © (20.01.05 17:03) [5]
> "Asunhronus socket error 10053"
> А всё виновата плохая инициализация компонента...
А конкретнее? Где и в чем "плохая"? В контесте данных, конкретных "компонент".
Аргументируйте свои слова - думаю для Вас это будет несложно.
P.S.
Мне бы уже давно осточертело "висеть на дороге" рекламным щитом с натписью "Indy - НАФСИГДА!!!"
← →
Eraser © (2005-01-20 20:05) [8]Verg ©
Digitman ©
Всмысле не компонента, а инизциализация компонентом winsock. Видимо проблема с блокирующим/неблокирующим режимом.
ЗЫ: Заметье, это вы про Indy первыми начали.
← →
Verg © (2005-01-20 20:19) [9]
> Всмысле не компонента, а инизциализация компонентом winsock.
> Видимо проблема с блокирующим/неблокирующим режимом.
Ну, ну, хорошо,... пусть так. Так где конкретно "плохость" инициализации и каким образом это сказывается именно на возникновение исключений типа "Asunhronus socket error 10053" и что же конкретно там сделано плохо в этом ключе? Вы же об этом говорите (об этой плохости), значит - знаете...
Нет, ну интересно было бы послушать, просто.
← →
Eraser © (2005-01-20 21:36) [10]Verg ©
Я не знаю, а догаадываюсь. Свои догадки я высказал. При таком количестве данных ничего больше сказать не могу. Если автору вопроса интересно- пусть уточнит.
← →
kaZaNoVa © (2005-01-20 22:07) [11]Digitman © (20.01.05 17:17) [6]
я, как всегда, предлагаю Апи-сокеты, могу дать пример ....
← →
Digitman © (2005-01-21 08:15) [12]
> kaZaNoVa © (20.01.05 22:07) [11]
> предлагаю Апи-сокеты, могу дать пример
да весь scktcomp.pas - сплошной готовый пример "Апи-сокетов" !
ты что-то новое изобрел в этом плане ?
← →
Sapersky (2005-01-21 12:15) [13]Сервер выдает ошибку сразу как выключается клиент на удаленной тачке "Asunhronus socket error 10053"
Насколько я понял (была подобная проблема), это "нормальное" поведение сокетов... Можно эту ошибку просто игнорировать (ErrorCode:=0), т.к. далее должен сработать OnClientDisconnect (что и требуется в данном случае).
← →
-=RUST=- © (2005-01-21 13:50) [14]>Digitman: ты мозги нат тут не парь.
>если на стороне сервера нет ни единого вызова send- или receive- метода, то данный отказ ни когда не возникнет.
А я не парю, на сервере есть вызовы метода send, и я не говорил что их там нет,но ошибка обнаруживалась не в момент его(метода) выполнения а как я уже сказал "сразу как выключается клиент на удаленной тачке"
ErrorCode:=0 всё ясно, и с клиентом тоже самое да? (всмысле чтоб при потере связи с сервером клиент периодически пытается её востановить)
← →
-=RUST=- © (2005-01-21 13:52) [15]kaZaNoVa
на счет апи было бы интересно посмотреть
← →
Digitman © (2005-01-21 14:11) [16]
> -=RUST=- © (21.01.05 13:50) [14]
нет паришь !
сначала ты говоришь
> Сервер выдает ошибку сразу как выключается клиент на удаленной
> тачке
а теперь, выясняется, что сервер все же ДЕЛАЕТ send-вызов, именно после чего собссно и происходит возбуждение события-ошибки
и именно так и должно быть !
отсутствие исключения при вызове send-метода НЕ говорит о том, что указанные тобой данные по завершению метода УЖЕ находятся на стороне приемника ... успешное выполнение send-метода говорит лишь отом , что указанные тобой к передаче данные успешно поставлены в очередь на передачу ... в асинхронном режиме передача очереди является отложенной (pending) операцией, и об ее успехе говорит событие On(Client)Write, а об ее отказе - событие On(Client)Error .. отказ же как раз и м.б. связан с тем фактом, что приемник при приеме данных на своей стороне неожиданно закрыл соединение по своей инициативе, о чем и говорит, кстати, код ошибки 10053
← →
-=RUST=- © (2005-01-22 00:17) [17]Ааа, ну убедил, спасибо за объяснение. (А то знакомство то мое первое с этими компонентами)
А как на счет востановлении связи клиента с сервером после временного отключения сервера?
← →
Digitman © (2005-01-22 12:00) [18]
> -=RUST=- © (22.01.05 00:17) [17]
> А как на счет востановлении связи клиента с сервером после
> временного отключения сервера?
ну как ? обычным образом - ClientSocket.Open или ClientSocket.Active := True
только не забывай, что в non-blocking-режиме успешный (т.е. не приведший к исключению) вызов Open или Active НЕ говорит об успешной установке соединения, а говорит о старте операции установления коннекта с сервером .. об успешности ее сообщит событие OnConnect, а о неуспешности - OnError .. в случае неуспешности в обработчике OnError обязательно следует написать как минимум Socket.Close
← →
Дармидон (2005-01-22 12:17) [19]Используйте ICS. Во-первых - открытие исходники, во-вторых - таких ошибок нет.
← →
Digitman © (2005-01-22 13:00) [20]
> Дармидон (22.01.05 12:17) [19]
> во-вторых - таких ошибок нет
каких ошибок ?
на основании чего ты утверждаешь, что код компонентов TServerSocket & TClientSocket содержит какие-то там ошибки ?
← →
Ksandr (2005-01-26 06:25) [21]Ща вот сижу и тоже делаю сетевую программу на Socket-ах.
Так вот когда клиент внезапно обрубаеться (типа у компа резет нажали :) у сервера возникает событие OnClientError и тут все просто: закрываем сокет и обнуляем код ошибки.
Когда же сервер обрубается подобным образом, то у клиента происходит событие OnError? в котором также просто закрываем сокет и обнуляем код ошибки.
Теперь, чтобы клиент восстановил связь с сервером при включении оного, надо в момент ошибки в клиенте запускать таймер с интервалом к примеру в 5 секунд. И в этом таймере вызывать метод Open. Так как событие OnError у нас уже описано, то никто ругаться не будет, а клиент будет долбиться на сервер до тех пор, пока не подключится или пока его самого не выключат.
Народ, это все пустяки. Я тут мучаюсь с отправкой файла. Кто может пообщаться на эту тему? Мой номер ICQ 170387055
← →
Digitman © (2005-01-26 08:28) [22]
> Так вот когда клиент внезапно обрубаеться (типа у компа
> резет нажали :) у сервера возникает событие OnClientError
а если клиент на "другом конце Интернет" ?
> мучаюсь с отправкой файла
бедняга)
← →
Ksandr (2005-01-26 11:48) [23]Кстати, про Инди... А как им пользоваться. Я в Delphi 8 не нашел сервера Инди. Есть только клиент. Может кто расскажет?
← →
Eraser © (2005-01-26 15:41) [24]Ksandr
В делфи 8 урезанная поставка Indy, притом 9 версии.
Иди на сайт http://www.indyproject.org/ и качай полуню бесплатную 10 версию.
Перед тем как устанавливать, ПОЛНОСТЬЮ сотри предыдущую.
← →
Ksandr (2005-01-27 07:23) [25]Попробовал установить...
Вот что выдал:
One or more the types in the assembly unable to load.
Не принимает. Что делать? Старый Инди из делфи я удалил. Только он был не 9 версии, а 10-ой. 10.00.17
А новый версии 10.00.53
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2005.03.27;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.04 c