Обработка ошибок у TClientSocket
Точнее TClientSocket. Каждый раз когда клиент не может присоединиться к серверу, это вызывает крах программы ( в случае gui это вызывало messagebox).
Как мне обработать возможные ошибки, чтобы вместо краха программы сделать вывод чего-нибудь безобидного типа printf("Can't connect\n");
Написание обработчика:
void __fastcall ClientSocket1Error(TObject *Sender,
TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &ErrorCode)
{printf("Can't connect\n");}
мне в этом деле никаак не помогло.
Заранее благодарю!
У меня есть консольное приложение, которое использует сокеты.
Точнее 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. Я попробовал написать такой обработчик ошибок
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;
и т.д.
Но это, к сожалению, помогает достаточно мало. Здесь что-то неправильно?
У меня есть консольное приложение, которое использует сокеты.
Точнее 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;
}
Должно помочь.
void __fastcall ClientSocket1Error(TObject *Sender,
TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &ErrorCode)
{
printf("Can't connect\n");
ErrorCode = 0;
}
Этот обработчик почему-то не вызывается. Когда клиентский сокет не может подсоединиться, просто выкидывается сообщение об ошибке и программа закрывается. Не могу сообразить, почему ...
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");
}
И т.д.
А может быть ошибка где то здесь?
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");
}
И т.д.
а где присвоение обработчика?
TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &ErrorCode)
{
printf("Can't connect\n");
ErrorCode = 0;
}
разве недостаточно?
Просто я никогда еще не делал такое руками, посмотрев то, что генерится автоматически, я решил, что это все что надо.
А того, что я написал перед main() функцию
разве недостаточно?
Просто я никогда еще не делал такое руками, посмотрев то, что генерится автоматически, я решил, что это все что надо.
Надо добавить:
ClientSocket->onError=ClientSocket1Error;
То же самое сделать и с другими обработчиками.
А вообще поройся в Инете. Там есть довольно много инфы по этому вопросу.
У меня есть консольное приложение, которое использует сокеты.
Точнее TClientSocket. Каждый раз когда клиент не может присоединиться к серверу, это вызывает крах программы ( в случае gui это вызывало messagebox).
Как мне обработать возможные ошибки, чтобы вместо краха программы сделать вывод чего-нибудь безобидного типа printf("Can't connect\n");
Написание обработчика:
мне в этом деле никаак не помогло.
Заранее благодарю!
try{Client->Connect();}
catch(...){Label1->Caption = "Dont want there move blin ... =(";}