Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.03.27;
Скачать: CL | DM;

Вниз

Про 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;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.543 c
11-1093868976
ecm
2004-08-30 16:29
2005.03.27
xHelpGen ?


14-1110342902
КаПиБаРа
2005-03-09 07:35
2005.03.27
"Женская" и "мужская" музыка


4-1108454861
Morf
2005-02-15 11:07
2005.03.27
Как найти значение в памяти любого приложения?


14-1110398834
Суслик
2005-03-09 23:07
2005.03.27
Это не про дельфи 2005, а про дельфи 6.


3-1109176563
Torri
2005-02-23 19:36
2005.03.27
Перенос содержимого из StringGrid в DBGrid