Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 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
1-1110549873
UT
2005-03-11 17:04
2005.03.27
Побновить экран


1-1110556503
redlord
2005-03-11 18:55
2005.03.27
Socket : TCustomWinSocket в качестве владельца


3-1109236444
v.topalov
2005-02-24 12:14
2005.03.27
Полетела база Inerbase 5.6


1-1110789480
Max Zyuzin
2005-03-14 11:38
2005.03.27
StatusBar с прогрессом


4-1108452944
Бульбаш
2005-02-15 10:35
2005.03.27
Программное нажатие enter





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский