Форум: "Сети";
Текущий архив: 2004.04.25;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.036 c