Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.25;
Скачать: CL | DM;

Вниз

TClientSocket постоянно создаёт дескрипторы.   Найти похожие ветки 

 
demonyator ©   (2004-02-21 01:04) [0]

Я хочу организовать автоматическое подключение клиента при появлении сервера online. Сделал так: поставил таймер на 5 секунд, а в нём myClient.Active := True. Но при этом после каждой неудачной попытки соединения программа открывает по 3 дескриптора. Кто-нибудь подскажет решение проблемы?


 
Verg ©   (2004-02-21 09:00) [1]

Ошибка при закрытии сокета. Т.е. ты где-то не закрывая сокет начинаешь новое соединение.
Где? - Нужно смотреть код.


 
demonyator ©   (2004-02-21 14:36) [2]

В том то и всё дело, что изначально сокет закрыт.


 
demonyator ©   (2004-02-21 14:57) [3]

Кстати, для примера я создал пустой проект. На нём: таймер и сокет - больше ничего. Та же самая проблема.
Вот код:
unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, ExtCtrls, ScktComp;

type
 TForm1 = class(TForm)
   ClientSocket1: TClientSocket;
   Timer1: TTimer;
   procedure Timer1Timer(Sender: TObject);
   procedure ClientSocket1Error(Sender: TObject; Socket: TCustomWinSocket;
     ErrorEvent: TErrorEvent; var ErrorCode: Integer);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Timer1Timer(Sender: TObject);
begin
 ClientSocket1.Active := True;
end;

procedure TForm1.ClientSocket1Error(Sender: TObject;
 Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
 var ErrorCode: Integer);
begin
 if ErrorCode = 10061 then ErrorCode := 0;
end;

end.


 
Verg ©   (2004-02-21 15:08) [4]


> [2] demonyator ©   (21.02.04 14:36)


Я знаю.
Ну, и? Дальше-то что?


 
Verg ©   (2004-02-21 15:12) [5]


> [3] demonyator ©   (21.02.04 14:57)


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


 
Devel ©   (2004-02-21 15:12) [6]

при ошибке закрывай сокет. этот вопрос был неоднократно на форуме.


 
Verg ©   (2004-02-21 15:16) [7]


> Devel ©   (21.02.04 15:12)
> при ошибке закрывай сокет. этот вопрос был неоднократно
> на форуме.


Мало того, его надо закрывать "прямо", т.е.
ClientSocket1.socket.close (в отличии от Clientsocket1.active := false) или socket.close (в обработчике OnError)


 
demonyator ©   (2004-02-21 15:26) [8]

Работает, спасибо за помощь.
Заодно, может есть какой-нибудь другой вариант решения проблемы подключения к серверу как только он выходит on-line, кроме как через таймер?


 
Verg ©   (2004-02-21 15:56) [9]


> [8] demonyator ©   (21.02.04 15:26)


Опять загадки...
Он - это сервер? Что значит "выходит on-line"?
Делает listen(serversocket,...?
Т.е. он становится готовым у принятию входящих соединений. Но он  никуда не "выходит"! Т.е. он таким образом никак не заявляет в сети, что "я готов, берите...". Он тихо-мирно становится готовым к установлению входящих соединений.

Думаю, что проблема отыскания момента времени, когда подключение к серверу будет гарантировано, в отсутствии дополнительных средств со стороны самого сервера, - это проблема более философская, чем техническая....


 
demonyator ©   (2004-02-23 15:39) [10]


> Verg ©   (21.02.04 15:56) [9]


Ясно. Пойду книги по филосифии почитаю... :))



Страницы: 1 вся ветка

Текущий архив: 2004.04.25;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.023 c
11-1064797055
SerB
2003-09-29 04:57
2004.04.25
Лучшее - враг хорошего?


1-1081146749
an-na2002
2004-04-05 10:32
2004.04.25
замена , на .


8-1073812295
Demian3797
2004-01-11 12:11
2004.04.25
Книга


1-1081508409
hgd
2004-04-09 15:00
2004.04.25
Шрифт внутрь


6-1077907167
ALeX.B.
2004-02-27 21:39
2004.04.25
Помогите! Нужен рабочий FTPServer!