Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ClientSocket, Ка избежать ошибки ? 
:(
    Опции темы
Yuriy
  Дата 13.1.2003, 18:51 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Подскажите, PLS, как избежать ошибки, а вернее что бы на экран не выбрасывалось окошко поверх приложения с ошибкой, при попытке коннектится ClientSocket'ом куда либо, если инет в даный момент отсутствует ?
  Вверх
Dayana
Дата 13.1.2003, 19:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 352
Регистрация: 6.10.2002
Где: Тель-Авив

Репутация: 2
Всего: 4



Попробуй
try
    попытка соединиться
except
    сам обрабатывай ошибку
end
PM MAIL ICQ   Вверх
dr.ZmeY
Дата 14.1.2003, 08:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Политолог
****


Профиль
Группа: Участник Клуба
Сообщений: 3892
Регистрация: 26.3.2002
Где: ..::STALINGRAD::. .

Репутация: нет
Всего: 60



У тебя что, прога всё время коннекта ищет?
Код

procedure TForm1.ClientSocketError(Sender: TObject;
 Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
 var ErrorCode: Integer);
begin
 ErrorCode := 0;
end;



--------------------
PM MAIL WWW ICQ Skype   Вверх
Yuriy
Дата 15.1.2003, 18:21 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











К сожаления TRY EXCEPT и ERRORCCODE:=0 не помогают, а это в первую очередь проверил !
А прога у меня все время должна быть связана с сервером, и если у клиента на машине связь с инетом прервалась, то прога пытается поаторно установить свзяь с сервером. Вот здесь и выскакивает эта ошибка, если не отвечает сам хост, а даже не порт этого хоста !
  Вверх
Fantasist
Дата 16.1.2003, 00:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй
***


Профиль
Группа: Участник Клуба
Сообщений: 1517
Регистрация: 24.3.2002

Репутация: нет
Всего: 41



Есть с Делфийскими сокетами такая проблема. Асинхронные исключения - вещь весьма неприятная. Обрабатывай Application.OnException.


--------------------
Волны гасят ветер...
PM MAIL   Вверх
blast
Дата 16.2.2003, 22:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 16.2.2003
Где: Москва

Репутация: нет
Всего: нет



В Борландовом компоненте TClientSocket есть маааленькая ошибочка - забыли закрыть сокет при ошибке и в итоге через опр. время если клиент постоянно пытается законнектиться к серверу а его нет, происходит переполнение системного буфера сокетов... Я сталкивался с этой проблемой еще на Win98 там под буфер отведено 254 элемента. Мой клиент стучался с интервалом 1 секунда и через ~15 минут (самое длительное время из всех попыток) появлялось окно с ошибкой 10055 (WSAENOBUFS или No buffer space available), хотя ВСЕ проверки и были СДЕЛАНЫ и ОБИШКИ ОТКЛЮЧЕНЫ !!! По мноему мнению сообщение посылается от Операционки - поэтому не влияет тот факт, что ErrorCode := 0.

Выход: Воспользоваться другими компонентами или при ошибке ПРОСТО закрыть сокет АПИшной функцией. Дескриптор или SocketHandle в компоненте доступен.

Закрывать сокет нужно именно АПИшной ф-цией, т.к. в .Close() - ОШИБКА !!

Немного лирики: Я месяца 3 - 4 потратил на выяснение этого. Никто не отвечал - даже про ошибку не знали. Перепробовал МНОГО всего и компоненты и ДАЖЕ на нижнем уровне сокеты соединял. Потом все-т-ки нашелся ДОБРЫЙ человек, который разъяснил в чем дело и все заработало как надо. biggrin.gif

Мое мнение - удобнее TClientSocket - TServerSocket.

Все! Всем успехов и удачи

PM MAIL ICQ   Вверх
Fantasist
Дата 18.2.2003, 06:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй
***


Профиль
Группа: Участник Клуба
Сообщений: 1517
Регистрация: 24.3.2002

Репутация: нет
Всего: 41




Ага, понятно. Ошибка там достадочно явно просматривается. В некоторых случаях (или во всех?) статус при рассоеденении не меняется - при повторной попытке законнектиться вылетает ошибка AlreadyConnected. Я, в свое время, отлавливал все эти вещи (в основном, в Application.OnException) и пересоздавал компонент. В принципе, эти моменты достадочно лекго выловить при отладке исходников этих компонентов, только мне борландовские сокеты все равно не очень устраивают в плане функциональности, во всяком случае сервер, чтобы тратить усилия на разбирательство с их исходниками.


--------------------
Волны гасят ветер...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1523 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.