Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Вопросы по Delphi (версии 2009, 2010 Weaver, 2011 Fulcrum)

Автор: ZBEP
Дата сообщения: 24.01.2010 14:30
Здравствуйте!
Есть программ она подключается к серверу с помощью idIRC, все нормально, все работает как надо и если с сервера кикнули, то заново переподключается и т.д.

Но при дисконнекте (физически вынуть кабиль например) прога выдает:


Цитата:
socket error 10054 connection reset by peer


И в дальнейшем вылетает каждый раз при попытке переподключения (вобше при любой попытки связаться с сервом - вылетает ошибка), спасает только перезапуск программы..
Как можно обойти эту ошибку?
П.с.
Слышал что это решается исключениями, примерно так:

Код: procedure TForm1.IdIRC1Disconnected(Sender: TObject);
begin
try
idIRC1.Disconnect;
except
end;
end;
Автор: spasius
Дата сообщения: 24.01.2010 15:01
ZBEP
какая версия Инди? Стоят ли обновления?
Автор: ZBEP
Дата сообщения: 24.01.2010 15:07
RAD Studio 2010 Version 14.0.3615.26342
Update 5
Indy 10.5.5


Добавлено:
На делфи 2009 Update 3 тоже самое (точнее о версии сказать не могу, она на другой ОС стоит, изначально на 2009 делал, потом перешел на 2010, думал может поможет..)
Автор: spasius
Дата сообщения: 24.01.2010 16:19
ZBEP
меняй версию не IDE а Инди, обновляется просто. В последних обновлениях много исправлений и в клиентах и в серверах.
Автор: ZBEP
Дата сообщения: 24.01.2010 16:25
А где можно скачать Indy выше 10.5.5 ???
Если можно прямую ссылку, просто инет ооочень тупит щас.
Автор: spasius
Дата сообщения: 24.01.2010 16:43
ZBEP
последний инди всегда лежит тут http://indy.fulgan.com
Вот еще статья про то как быть с актуальным Инди и как его обновить. http://kvendi.pp.ru/?p=66
Автор: ZBEP
Дата сообщения: 24.01.2010 16:57
Спс.
В актуальных Инди последняя версия 10.5.5
П.с.
Может это не в версии инди дело? Может это оно мне так сообщает о разрыве и т.д.?

Может я вам исходники кину, а вы посмотрите (51кб), а то я чувтвую буду долго тупить((
Был бы очень вам благодарен. т.к. я с инди работаю ток 4 день и мало что о нем знаю и может допустил какие-нибудь ошибки в коде из-за чего и вылетает такая ошибка.
Щас пока поставлю то что с http://indy.fulgan.com скачал.
Автор: spasius
Дата сообщения: 24.01.2010 17:02
последняя версия 10.5.7 (http://indy.fulgan.com/Tiburon.changelog.txt)
исходники могу посмотреть, мыло в профиле.
Автор: ZBEP
Дата сообщения: 24.01.2010 17:06
Большое спасибо щас отошлю!
Автор: X11
Дата сообщения: 24.01.2010 17:10
Осторожнее нужно обновлять инди. А то будут танцы с бубнами

Я пятницу пытался установить новую версию. При установке ошибка: Undeclared identifier: 'IdSslUCTTimeDecode' и всё, тупик.
И ещё, перед установкой новой версии нужно хорошенечко вычистить всё от старой версии.
Сейчас у меня стоит на комп полурабочая версия инди 10.5.7. Кстати в релизы дельфи и в обновления для дельфи включают инди с явными багами. Их вообще не тестируют. Вообще.

На данный момент просто НЕ существует более или менее нормальной рабочей версии инди.

Походу эти инди программируют какие-то школяры.
Автор: ZBEP
Дата сообщения: 24.01.2010 17:14
Я на 2009 попробую на другой ОС обновить, 2010 обновлю как уже буду точно знать как)
Автор: X11
Дата сообщения: 24.01.2010 17:20
Возможно, что придётся устанавливать инди с танцем и бубном из SVN
http://forums2.atozed.com/viewtopic.php?f=7&t=3044
Автор: ZBEP
Дата сообщения: 24.01.2010 17:47
spasius, я отослал, должно прийти было.
Автор: spasius
Дата сообщения: 24.01.2010 18:36
ZBEP
могу с уверенностью сказать что все обращения типа IdIRC.Raw нужно поместить в конструкцию
try
...
except
on E: EIdSocketError do
begin
end;
end;
Автор: ZBEP
Дата сообщения: 24.01.2010 19:18
Ок, спс.
Т.е. например:

Код: try
IdIRC1.raw('SAY ');
except
on E: EIdSocketError do
begin
richedit1.text:=richedit1.text+'Ошибка';
end;
end;
Автор: spasius
Дата сообщения: 24.01.2010 19:44
ZBEP
В случае работы с Инди лучше всегда обрабатывать все исключения ошибок, иначе работать будет "под знаком вопрос".
X11
Вот тут ты прав, Инди всегда на стадии разработки и всегда после установки студии нужно накатывать обновление. По опыту знаю что самым оптимальным является перенос использованных компонентов на свой класс, т.е. провести небольшой рефакторинг.
Автор: ZBEP
Дата сообщения: 24.01.2010 20:05
spasius
Вот смотрите, накатал на скорую руку форму с 2 кнопками и рич эдитом, вот код:
[more=Код программы]
Код: unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,IdException,IdStack, IdContext, IdBaseComponent, IdComponent,
IdTCPConnection, IdTCPClient, IdCmdTCPClient, IdIRC, StdCtrls, ComCtrls;

type
TForm1 = class(TForm)
RichEdit1: TRichEdit;
Button1: TButton;
Button2: TButton;
IdIRC1: TIdIRC;
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure IdIRC1Status(ASender: TObject; const AStatus: TIdStatus;
const AStatusText: string);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
try
begin
idIRC1.Host:='66.230.224.106';
idIRC1.Port:=20260;
idIRC1.Connect();
end;
except
on E:EIdSocketError do
richedit1.text:=richedit1.text+'Ошибка'+sLineBreak;
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
try
idIRC1.Disconnect();
except
on E:EIdSocketError do
richedit1.text:=richedit1.text+'Ошибка'+sLineBreak;
end;
end;

procedure TForm1.IdIRC1Status(ASender: TObject; const AStatus: TIdStatus;
const AStatusText: string);
begin
begin
try
richedit1.Lines.Add(AStatusText);
except
on E:EIdSocketError do
richedit1.text:=richedit1.text+'Ошибка'+sLineBreak;
end;
end;
end;

end.
Автор: psa1974
Дата сообщения: 24.01.2010 20:47
ZBEP
Читал твой последний опус, читал, аж устал. И все думал, когда ж ему будет конец... Я понимаю, что ты увлекся, но приведи свой пост к человеческому виду с использованием [ more ]. Пожалуйста.
Автор: ZBEP
Дата сообщения: 24.01.2010 21:18
psa1974
Сделал, сори что сразу не сделал.
Можете помочь с этой проблемкой?
Автор: ZBEP
Дата сообщения: 25.01.2010 11:19
Помогите пожалуйста.
Автор: ZBEP
Дата сообщения: 26.01.2010 17:22
Все проблема решена. После дисконнекта добавить:
idIRC1.Socket.Close;

Тогда прога закроет соединение и в дальнейшем можно будет успешно подключиться к серверу.
П.с.
spasius, Спасибо!
Автор: relictus
Дата сообщения: 30.01.2010 12:20
Задолбали крэши IDE:


Вот где стрелка показывает было написано begin //, а дальше хотел написать коммент по-русски, ан фиг там! Срочка исчезла и пошел бесконечный цикл окон с ошибкой. Помогает только прибитие студии.
Может кто знает как лечится (если)?
RAD Studio 2010 с апдейтами 4/5, стоит еще MMX 8.0...
Автор: data man
Дата сообщения: 30.01.2010 12:44
relictus

Цитата:
стоит еще MMX 8.0

Может без него попробовать ?
У меня не получается воспроизвести - даже имена для процедур/переменных задавал по-русски.

P.S.
Цитата:
RAD Studio 2010 с апдейтами 4/5
Аналогично.
Автор: relictus
Дата сообщения: 30.01.2010 13:04
data man

Цитата:
У меня не получается воспроизвести

Да в том-то и дело... Я не установил зависимости его появления, т.к. в других подобных случаях все проходит нормально...
Тоже грешу чуток на MMX, но без него кодить уже не могу - привык, удобно

Кто-нибудь, не использующий MMX, сталкивался с таким/подобным багом?
Автор: data man
Дата сообщения: 30.01.2010 13:41
relictus

Есть у меня одно подозрение - во избежание оффтопа см. ПМ.
Автор: InSe0F
Дата сообщения: 30.01.2010 23:30
я дерево)) объясните мне почему когда я пишу
inet_addr(pansichar(ip));
ответ получается 16777216 // ip : string = '127.0.0.1'
а когда
inet_addr('127.0.0.1');
ответ получается 16777343
?????????????????????????????

Добавлено:
компилятор d2009
естественно на юните winsock
Автор: data man
Дата сообщения: 30.01.2010 23:50
InSe0F
Ошибка в этом
Цитата:
ip : string

Нужно написать

Код: ip: ansistring
Автор: InSe0F
Дата сообщения: 31.01.2010 00:57
) круто работает
но так почему же ? вопрос остался
кстати как быть тогда если надо сделать PAnsiChar(IntToStr(50))? в анси стринг перевести только через переменную удастся?
допустим
str : ansistring;
str := IntToStr(50);
PAnsiChar(str);
?


Добавлено:
надо в трее отражать зеленую/красную иконку статуса - которая отрисовывается в TShape на форме - можно как нить ее запихнуть в TIcon?
Автор: psa1974
Дата сообщения: 31.01.2010 03:09
InSe0F

Цитата:
но так почему же ? вопрос остался
Это элементарно

Перевести в AnsiString можно путем явного приведения (неявное приведение двубайтной строки к однобайтной компилятор НЕ ДЕЛАЕТ), например так:
Код: str : ansistring;
str:= AnsiString(IntToStr(50))
Автор: InSe0F
Дата сообщения: 31.01.2010 11:56
psa1974
респект разобрался

так что насчет иконки? у меня тока одна мысль.. на форме сделать битмап и на нем отрисовать а потом запихнуть в иконку

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172

Предыдущая тема: Установка копоненты ZipTV


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.