•  

ГлавнаяIndyЧастые вопросы по Indy → Отправляю сообщение через idUDPClient, необходимо проверить верно ли пользователь ввел адрес

Создано: 17.05.2014 3:34:11 · Исправлено: 17.05.2014 3:34:11 · Прочтений: 618

Отправляю сообщение через idUDPClient, необходимо проверить верно ли пользователь ввел адрес, и вообще отслеживать ошибки. Хочу сделать через try:
try
    idUDPClient1.SendBuffer(Adress,6969,buffer^,SizeOf(buffer^));
except
on ... do ShowMessage(ошибка);


на место многоточия нужно поставить исключение, где его взять?
Вы случайно не про это спрашиваете:

  except
    ShowMessage(Ошибка.);
  end;


или

  except
    on E: Exception do
      ShowMessage(E.Message);
  end;

?
Не совсем так, в вашем случае будет сообщение не по русски:Socket Error # 101010. Host Not Found. А мне для парочки случаев нужно отловить исключения и выставить в соответтвие им сообщения об ошибках,например:
try
idUDPClient1.SendBuffer(Adress,6969,buffer^,SizeOf(buffer^));
except
on EHostNotFound do ShowMessage(Узел не найден);
on EBadIP do ShowMessage(Неверный ip);
on Error do ShowMessage(Неизвестная ошибка);
end;
И проблема в том, что не знаете, что поставить на место Error в on do? Exception ставьте. Или используйте else:
  except
    on EHostNotFound do ShowMessage(Узел не найден);
    on EBadIP do ShowMessage(Неверный ip);
    else ShowMessage(Неизвестная ошибка);
  end;


P.S. Хотя я бы все неизвестные исключения вообще не ловил бы, а передавал бы уровнем выше.
Ну и если уж ловить, то хотя бы показывать сообщение об ошибке. А то представьте, что при реальном использовании вам программа покажет сообщение Неизвестная ошибка. Что вы при этом будете делать? Непонятно же, что произошло. А если будет хотя бы сообщение, то можно хоть что-то предпринять.
Именно что я не знаю точного начертания исключений, то есть EBabIP это я сам придумал, а само исключение как пишется или где его можно посмотреть? (список исключений для этого компонента)
Полный список исключений можно найти в справке по Indy (в разделе Symbol references все классы, начинающиеся на E). Справка поставляется с Delphi или её можно взять тут: http://www.indyproject.org/Sockets/Docs/index.EN.aspx
Более точный список можно посмотреть по исходным кодам. Откройте IdUDPClient.pas и найдите там все raise. Просмотрите список uses этого модуля, поочерёдно откройте каждый модуль и точно так же найдите в нём все raise.
Если нужно для какого-то конкретного метода - просмотрите его исходных код, включая все используемые в нём функции и классы.
А если проблема только в локализации, то я бы просто локализовал бы строки - благо они обычные resourcestring (объявленные, кстати, в IdResourceStrings.pas и IdResourceStringsProtocols.pas).