![]() |
|
|
![]()
|
|
| Гость_Игорь |
|
|||
|
Unregistered |
Использую компонент TClientSocket для опроса контроллера по сети
При разрыве связи прога выдает сообщение "Asynchronous socket error 10053". Вопрос в следующем: 1. Как заставить прогу не выдавать это окно. 2. Каким образом организовать автоконнект при отсутствии связи. Пробовал различные варианты с Socket->Active = true но ничего не получилось. В Buildere не силен, а в сях заморишся нужное окно писать. Спасибо |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 24 Всего: 98 |
http://forum.vingrad.ru/index.php?showtopic=58171
http://forum.vingrad.ru/index.php?showtopic=58209 http://forum.vingrad.ru/index.php?showtopic=58521 -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| Гость_Игорь |
|
|||
|
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 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 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... |
|||
|
||||
| Гость_Игорь |
|
|||
|
Unregistered |
Может еще что-то надо изменить?
ошибка выскакивает, после подключения сокет не востанавливается |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 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... |
|||
|
||||
| Гость_Игорь |
|
|||
|
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" или ему подобные(если неудача при попытке создания сокета цифры другие) ведь в этом случае выполнение кода приостанавливается пока не нажмешь ок на "Asynchronous socket error 10053". для меня это принципиальная задача, события с контроллера будут писатся в лог, в случае допустим "рестарт свитч", учета событий не будет пока кто-то не закроет сообщение об ошибке и нажмет "подключиться". Странно. Я думал есть готовое решение, ведь такая задача может появится довольно часто. Или надо использовать какие-то другие компоненты и функции билдера? |
|||
|
||||
| Artemon |
|
|||
|
а ты мне нравишься ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1771 Регистрация: 24.2.2004 Где: Челябинск Репутация: 7 Всего: 20 |
В OnError сокета, устанавливай ErrorCode в NULL.
И тогда все случившееся ошибки будут игнорироваться, но не забывай также try и catch. -------------------- Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru |
|||
|
||||
| Гость_Игорь |
|
|||
|
Unregistered |
спасибо hunter'у, Artemon'у и Бегемоту из поста
http://forum.vingrad.ru/index.php?showtopic=56125 (сам бы не додумался организовать цикл при помощи таймера) Все работает как надо 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 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 252 Регистрация: 1.6.2005 Репутация: нет Всего: нет |
ErrorCode как советует сам билдер надо не в НУЛЛ ставить а в 0 , ну и вообще надо смотреть что за код ошибки ! там не только отсутствие связи , но и ещё куча ...на них то наверняка надо как то по другому реагировать ...
|
|||
|
||||
![]()
|
| Правила форума "С++ Builder" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C++ Builder | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |