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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> idTCPClient, Connectiobn reset by peer 
:(
    Опции темы
Unregistered
Дата 21.5.2004, 03:02 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Здравствуйте. Использую сетевые компоненты idTCpServer и idTCPClient. По сети изредка возникают затыки и у клиента выскакивает сообщение о разрыве связи (Connection reset by peer). Через некоторое время связь восстанавливается и программа продолжает работать, но сообщение это естественно мозолит глаз пока не квитируешь. Положение ухудшается тем, что программа должна работать круглосуточно и таких сообщений может выпадать довольно много (что, собственно, и происходит). Установка большого (10 минут) таймаута на чтение не помогает (разрыв фиксируется раньше). Использование try... except... тоже не помогает, вот код который я использую:

..........
With tcpclient do
begin
if not connected then
try
connect;
except
end;
if connected then
begin
WriteLn('REQUEST DATA');
try //таймаут на чтение ловиться нормально
CurrString:=CurrentReadBuffer;
except
CurrString:='';
end;
............

Как обработать исключение на разрыв соединения?
  Вверх
SkilFul
Дата 22.5.2004, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Я понял что у тебя творится! проверь событие OnDisconnect (на всякий случай, может там стоит SHowmessage smile.gif ).
У меня тоже была такая же ошибка, когда я работал с TCP
Проверь все события считывания и отправки информации ... Может че упустил ...

Ниже текст, может он тебе пригодится ...

Можно исключить твою ошибку с помощью обработки классов исключительных ситуаций ...
Я об этом сообщу попозже (надо все проверить), но обязательно сообщу! заглядывай время от времени в свою тему ... Может даже сегодня ...

И лучше пользуйся, если тебе не надо выводить сообщений об ошибке:
Код

if not IdTcpClient1.Connected then
   exit;



Это отрывок из моего ЧАТА -
Я использую немного другую технологию:

Код

procedure TForm1.IdTCPClient1Connected(Sender: TObject);
begin
TRY
 IdTCPClient1.WriteLn(edit2.Text); //отправка имени серверу, чтобы он мог зарегистрировать вас в пользователях
 EXCEPT END;
end;


Подключение/отключение на кнопке (если захочется вручную откл\вкл)
Код

procedure TForm1.SpeedButton2Click(Sender: TObject);
begin
try
if idtcpclient1.Connected then
begin
idtcpclient1.Disconnect;
end else begin
   IdTCPClient1.Host := edit3.text;
   IdTCPClient1.Port := sePort.Value;
     IdTCPClient1.Connect;
     IdTCPClient1.WriteLn('@' + 'CLIENTS:REQUEST'); //сообщение серверу, чтобы он выслал список посетителей
 end;

  end;
  end;


Вот так идет прием информации:
Код

procedure TForm1.Timer2Timer(Sender: TObject);
var   i,i2:integer;
 Com,
   Msg,sxt,sx: string;
begin

 if not IdTcpClient1.Connected then
   exit;
try
 Msg := IdTCPClient1.ReadLn('', 5); \\чтение
 if Msg <> '' then
   if Msg[1] <> '@' then
   begin
     {не системные комманды, текст добавляется в поле текста }
     memLines.Lines.Add(Msg);
   end
   else
   begin
     { системные }
     
     Msg := Trim(msg);
     if (pos('CLIENTS',msg)<>0) then
             lbClients.Items.CommaText := Msg; \\заполнение LIstBox - а посетителей

   end;

except statusbar1.SimpleText:='Обрыв связи' end;


В этой системе никаких ошибок не возникает, а если что-нибудь происходит, то об ошибке пишется в никому не мешающем StatusBar. Вот собственно и все, может тебе поможет ... Если че спрашивай ... smile.gif
PM MAIL   Вверх
SkilFul
Дата 22.5.2004, 18:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Исключительными ситуации:

EAbort - Данный класс предназначен для формирования и обработки "невидимых" для пользователя ошибок и используется разработчиками для управления ходом выполнения программы. Диалоговое окно с сообщением об ошибке не показывается.
EAbstractError - попытка выполнения абстрактного метода.
EAssertionFailed - значение процедуры Assert равно false.
EExternal - Неверное функционирование системы Windows.
EExternalException - невозможность распознать исключительную ситуацию средствами Deplhi 7.
EInvalidPointer - неверная операция при работе с указателями.
EMathError - Базовый класс, на основе которого сделаны классы исключительных ситуаций при работе с числами с плавающей запятой.
EWin32Error - ошибка 32-разрядной версии Windows.

Вот проверь - подставь эти классы исключительных ситуаций.
Если че не пойдет, напиши, может еще чем нибудь помогу ... smile.gif

пример использования:
Код

on E:EAbstractError do
E.Message:='Ошибка вычислений'; //что делать при возникновении ошибки

PM MAIL   Вверх
Unregistered
Дата 24.5.2004, 02:32 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











SkilFul
Спасибо. Нет, showmessage-а нету biggrin.gif Немного отвлекусь. Один раз купил мышку, принес домой, а она еле ворочается. Позвонил продавцу (типа когда можно поменять прийти), а он мне говорит: а вы фиксатор с колесика сняли? hehe.gif hehe.gif hehe.gif
Да я уже исправил все. writeln как-то между глаз попал smile.gif Пихнул его в try ... except и естесственно все нормально пошло. Сколько раз себе говорил - посмотри, ведь где-то рядом валяется! Ну все равно спасибо.
  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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