Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Обработка ошибок у TClientSocket

2.6K
31 января 2005 года
NinthBit
43 / / 31.01.2005
У меня есть консольное приложение, которое использует сокеты.
Точнее TClientSocket. Каждый раз когда клиент не может присоединиться к серверу, это вызывает крах программы ( в случае gui это вызывало messagebox).
Как мне обработать возможные ошибки, чтобы вместо краха программы сделать вывод чего-нибудь безобидного типа printf("Can't connect\n");
Написание обработчика:
Цитата:

void __fastcall ClientSocket1Error(TObject *Sender,
TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &ErrorCode)
{printf("Can't connect\n");}


мне в этом деле никаак не помогло.
Заранее благодарю!

2.1K
31 января 2005 года
Werti
47 / / 31.01.2004
Цитата:
Originally posted by NinthBit
У меня есть консольное приложение, которое использует сокеты.
Точнее TClientSocket. Каждый раз когда клиент не может присоединиться к серверу, это вызывает крах программы ( в случае gui это вызывало messagebox).
Как мне обработать возможные ошибки, чтобы вместо краха программы сделать вывод чего-нибудь безобидного типа printf("Can't connect\n");
Написание обработчика:

мне в этом деле никаак не помогло.
Заранее благодарю!



void __fastcall TForm1::ClientSocket1Error(TObject *Sender,
TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &ErrorCode)
{
Application->MessageBox("никак не могу приконектиться))).", "Look", MB_OK);

}
выводить так
аащититься от краха нуно try блоком с проверкой на ESocketError.CreateRes(@sNoAddress);

2.6K
31 января 2005 года
NinthBit
43 / / 31.01.2005
1.Если не сложно, приведите, пожалуйста, конкретный код для блока try.
2. Я попробовал написать такой обработчик ошибок
Цитата:
void __fastcall TForm1::ClientSocket1Error(TObject *Sender,
TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &ErrorCode)
{

switch(ErrorEvent) {
case eeSend : Memo1->Lines->Add("An error occurred when trying to write to the socket connection.");
break;
case eeReceive : Memo1->Lines->Add("An error occurred when trying to read from the socket connection.");
break;
и т.д.


Но это, к сожалению, помогает достаточно мало. Здесь что-то неправильно?

10.0K
31 января 2005 года
ZIS
3 / / 31.01.2005
Цитата:
Originally posted by NinthBit
У меня есть консольное приложение, которое использует сокеты.
Точнее TClientSocket. Каждый раз когда клиент не может присоединиться к серверу, это вызывает крах программы ( в случае gui это вызывало messagebox).
Как мне обработать возможные ошибки, чтобы вместо краха программы сделать вывод чего-нибудь безобидного типа printf("Can't connect\n");
Написание обработчика:

мне в этом деле никаак не помогло.
Заранее благодарю!



Попробуй написать обработчик так:

void __fastcall ClientSocket1Error(TObject *Sender,
TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &ErrorCode)
{
printf("Can't connect\n");
ErrorCode = 0;
}

Должно помочь.

2.6K
31 января 2005 года
NinthBit
43 / / 31.01.2005
Цитата:
Originally posted by ZIS

void __fastcall ClientSocket1Error(TObject *Sender,
TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &ErrorCode)
{
printf("Can't connect\n");
ErrorCode = 0;
}


Этот обработчик почему-то не вызывается. Когда клиентский сокет не может подсоединиться, просто выкидывается сообщение об ошибке и программа закрывается. Не могу сообразить, почему ...

2.6K
31 января 2005 года
NinthBit
43 / / 31.01.2005
А может быть ошибка где то здесь?
Цитата:

int main(int argc, char* argv[])
{
int IsServer=0;
int IsClient=0;
AnsiString buf;
TClientSocket *ClientSocket1;
TServerSocket *ServerSocket1;
int i;
for (i = 0; i < argc; i++){
switch (argv[1]){
case 's' :
IsServer=1;
break;
case 'c' :
IsClient=1;
break;
}
}

if(IsClient){

ClientSocket1 = new TClientSocket(NULL);
ClientSocket1->ClientType = ctBlocking;
ClientSocket1->Address = buf.printf("127.0.0.1");

ClientSocket1->Open();
if(!ClientSocket1->Active)
printf("Client wasn't created\n");

}
И т.д.

10.0K
31 января 2005 года
ZIS
3 / / 31.01.2005
Цитата:
Originally posted by NinthBit
А может быть ошибка где то здесь?
int main(int argc, char* argv[])
{
int IsServer=0;
int IsClient=0;
AnsiString buf;
TClientSocket *ClientSocket1;
TServerSocket *ServerSocket1;
int i;
for (i = 0; i < argc; i++){
switch (argv[1]){
case 's' :
IsServer=1;
break;
case 'c' :
IsClient=1;
break;
}
}

if(IsClient){

ClientSocket1 = new TClientSocket(NULL);
ClientSocket1->ClientType = ctBlocking;
ClientSocket1->Address = buf.printf("127.0.0.1");

ClientSocket1->Open();
if(!ClientSocket1->Active)
printf("Client wasn't created\n");

}
И т.д.



а где присвоение обработчика?

2.6K
31 января 2005 года
NinthBit
43 / / 31.01.2005
А того, что я написал перед main() функцию
Цитата:
void __fastcall ClientSocket1Error(TObject *Sender,
TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &ErrorCode)
{
printf("Can't connect\n");
ErrorCode = 0;
}


разве недостаточно?
Просто я никогда еще не делал такое руками, посмотрев то, что генерится автоматически, я решил, что это все что надо.

10.0K
01 февраля 2005 года
ZIS
3 / / 31.01.2005
Цитата:
Originally posted by NinthBit
А того, что я написал перед main() функцию

разве недостаточно?
Просто я никогда еще не делал такое руками, посмотрев то, что генерится автоматически, я решил, что это все что надо.



Надо добавить:
ClientSocket->onError=ClientSocket1Error;
То же самое сделать и с другими обработчиками.
А вообще поройся в Инете. Там есть довольно много инфы по этому вопросу.

9.2K
02 февраля 2005 года
Noer
10 / / 03.01.2005
Цитата:
Originally posted by NinthBit
У меня есть консольное приложение, которое использует сокеты.
Точнее TClientSocket. Каждый раз когда клиент не может присоединиться к серверу, это вызывает крах программы ( в случае gui это вызывало messagebox).
Как мне обработать возможные ошибки, чтобы вместо краха программы сделать вывод чего-нибудь безобидного типа printf("Can't connect\n");
Написание обработчика:

мне в этом деле никаак не помогло.
Заранее благодарю!


try{Client->Connect();}
catch(...){Label1->Caption = "Dont want there move blin ... =(";}

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог