Поиск:

Ответ в темуСоздание новой темы Создание опроса
> TClientSocket, автоподключение 
:(
    Опции темы
Гость_Игорь
Дата 11.10.2005, 11:34 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Использую компонент TClientSocket для опроса контроллера по сети
При разрыве связи прога выдает сообщение
"Asynchronous socket error 10053".
Вопрос в следующем:
1. Как заставить прогу не выдавать это окно.
2. Каким образом организовать автоконнект при отсутствии связи.

Пробовал различные варианты с
Socket->Active = true
но ничего не получилось.
В Buildere не силен, а в сях заморишся нужное окно писать.
Спасибо
  Вверх
_hunter
Дата 11.10.2005, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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





--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Гость_Игорь
Дата 11.10.2005, 14:15 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











1 ссылка) толковая, но самый интересный для меня вопрос без ответа
2 ссылка) не могу понять куда и чего вдолбить чтобы убрать ошибку

client.cpp

#include <vcl.h>
#pragma hdrstop
//---------------------------------------------------------------------------
USEFORM("Unit1.cpp", Form1);
//---------------------------------------------------------------------------
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
try
{
Application->Initialize();
Application->CreateForm(__classid(TForm1), &Form1);
Application->Run();
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
catch (...)
{
try
{
throw Exception("");
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
}
return 0;
}





на всякий случай код unit.cpp

#include <vcl.h>
#include <dos.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
MemoIn->Items->Clear();
MemoOnOff->Lines->Clear();

MySocket->Active = true;

}
//---------------------------------------------------------------------------

void __fastcall TForm1::MySocketRead(TObject *Sender,
TCustomWinSocket *Socket)
{
MemoIn->Items->Add(Socket->ReceiveText());
}
//---------------------------------------------------------------------------



void __fastcall TForm1::MySocketError(TObject *Sender,
TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &ErrorCode)
{
MemoOnOff->Lines->Clear();
MemoOnOff->Lines->Add("Ñáîé ñîåäèíåíèÿ");
// MySocket->Active = true;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::MySocketConnecting(TObject *Sender,
TCustomWinSocket *Socket)
{
MemoOnOff->Lines->Clear();
MemoOnOff->Lines->Add("Ñîåäèíåíèå óñòàíîâëåíî");
}


3 ссылка) немного юмора для поднятия настроения
  Вверх
_hunter
Дата 11.10.2005, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



реакция на ошибку у тебя есть, значит осталось MySocket->Active = true; ( из __fastcall TForm1::TForm1(TComponent* Owner) ) в обработчик засунуть:
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
MemoIn->Items->Clear();
MemoOnOff->Lines->Clear();
try
{
MySocket->Active = true;
}
catch(...)
{
}
}
и все...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Гость_Игорь
Дата 11.10.2005, 17:36 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Может еще что-то надо изменить?
ошибка выскакивает, после подключения сокет не востанавливается
  Вверх
_hunter
Дата 11.10.2005, 17:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



выскакивает в билдере? тогда отключи останов на делфийских исключениях: Tolls->Debugger Options->Language Exceptions->Stop on Delphi Exceptions
а насчет востановления -- скорее всего сокет пересоздать нужно будет... но не уверен


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Гость_Игорь
Дата 12.10.2005, 09:33 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Ошибка выскакивает и в билдере и в готовом ехе
сделал следующее

void __fastcall TForm1::MySocketError(TObject *Sender,
TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &ErrorCode)
{
[b]MySocket->Active = false;[/b]
MemoOnOff->Lines->Clear();
MemoOnOff->Lines->Add("Сбой подключения");
}

повесил кнопку с MySocket->Active = true;

теперь после сообщения об ошибке нажав кнопку сокет востанавливается
можно ли в билдере сделать цикл или еще что-то типа:

1 создавать сокет до тех пор пока !ок
2 в случае сокетерор переход на 1


и как заставить не появлятся сообщение об ошибке "Asynchronous socket error 10053" или ему подобные(если неудача при попытке создания сокета цифры другие) smile
ведь в этом случае выполнение кода приостанавливается пока не нажмешь ок на "Asynchronous socket error 10053".
для меня это принципиальная задача, события с контроллера будут писатся в лог, в случае допустим "рестарт свитч", учета событий не будет пока кто-то не закроет сообщение об ошибке и нажмет "подключиться".
Странно. Я думал есть готовое решение, ведь такая задача может появится довольно часто.
Или надо использовать какие-то другие компоненты и функции билдера?
smile построение в билдере отличается от просто с++ в принципе

  Вверх
Artemon
Дата 12.10.2005, 10:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 24.2.2004
Где: Челябинск

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



В OnError сокета, устанавливай ErrorCode в NULL.
И тогда все случившееся ошибки будут игнорироваться, но не забывай также try и catch.


--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
Гость_Игорь
Дата 12.10.2005, 14:41 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











спасибо hunter'у, Artemon'у и Бегемоту из поста
http://forum.vingrad.ru/index.php?showtopic=56125
(сам бы не додумался организовать цикл при помощи таймера)
Все работает как надо smile
1 создавать сокет до тех пор пока !ок
2 в случае сокетерор переход на 1

НИКАКИХ сообщений об ошибке сокета больше не вылетает

даю код, мож кому пригодится

//---------------------------------------------------------------------------

#include <vcl.h>
#include <dos.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
MemoOnOff->Lines->Clear();
try
{
MySocket->Active = true;
}
catch(...)
{
}

}
//---------------------------------------------------------------------------

void __fastcall TForm1::MySocketRead(TObject *Sender,
TCustomWinSocket *Socket)
{
MemoIn->Items->Add(Socket->ReceiveText());
}
//---------------------------------------------------------------------------

void __fastcall TForm1::MySocketError(TObject *Sender,
TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &ErrorCode)
{
ErrorCode = NULL; //одна строка и в случае ошибок сокета никаких прерываний в работе!
MySocket->Active = false; //без этой строки сокет не востановишь
MemoOnOff->Lines->Clear();
MemoOnOff->Lines->Add("Ñáîé ñîåäèíåíèÿ");
MemoIn->Items->Add("Ñáîé ñîåäèíåíèÿ");
Timer1->Enabled=true; //запускаем цикл автоподключений
}
//---------------------------------------------------------------------------

void __fastcall TForm1::MySocketConnecting(TObject *Sender,
TCustomWinSocket *Socket)
{
MemoOnOff->Lines->Clear();
MemoOnOff->Lines->Add("Ñîåäèíåíèå óñòàíîâëåíî");
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Timer1Timer(TObject *Sender)
//в свойстве интервал не забудте выставить время.
{
MySocket->Active = true;
Timer1->Enabled = false;
}

//---------------------------------------------------------------------------


  Вверх
Dubinsky
Дата 1.11.2005, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



ErrorCode как советует сам билдер надо не в НУЛЛ ставить а в 0 , ну и вообще надо смотреть что за код ошибки ! там не только отсутствие связи , но и ещё куча ...на них то наверняка надо как то по другому реагировать ...
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

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

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

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

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


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

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


 




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


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

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