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

Вниз

Блин... запарился два дня уже не могу сделать   Найти похожие ветки 

 
Гость   (2004-09-02 12:30) [0]

Напишите пожайлуста порядок действий с TClientSocket что он все время пытася подключится к серверу 192,168,0,100 port 6666 и не вадавал ошибки что буфер переполнен
Пожайдуста ,С уважением...


 
VID ©   (2004-09-02 12:50) [1]

Тебе уже говорили что надо обрабатывать OnError.
В обработчике пиши
ErrorCode := 0;
Socket.Close;


 
Гость   (2004-09-02 13:17) [2]


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 ClientSocket1Connect(Sender: TObject;
     Socket: TCustomWinSocket);
   procedure ClientSocket1Error(Sender: TObject; Socket: TCustomWinSocket;
     ErrorEvent: TErrorEvent; var ErrorCode: Integer);
   procedure ClientSocket1Disconnect(Sender: TObject;
     Socket: TCustomWinSocket);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Timer1Timer(Sender: TObject);
begin
ClientSocket1.Open;
end;

procedure TForm1.ClientSocket1Connect(Sender: TObject;
 Socket: TCustomWinSocket);
begin
Timer1.Enabled:=False;
end;

procedure TForm1.ClientSocket1Error(Sender: TObject;
 Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
 var ErrorCode: Integer);
begin
ErrorCode:=0;
Socket.Close;
Timer1.Enabled:=True;
end;

procedure TForm1.ClientSocket1Disconnect(Sender: TObject;
 Socket: TCustomWinSocket);
begin
Timer1.Enabled:=True;
end;

end.

Теперь вообще к серверу не подключается если сервер был запущен после клиента ,память все равно жрет но намного медленнее интервал таймера =1000 мс
????


 
Digitman ©   (2004-09-02 13:18) [3]


> Гость   (02.09.04 12:30)


тебе здесь

http://delphimaster.net/view/14-1094044391/

все уже разжевали  !

что непонятного ? разницу между Socket.Сlose и ClientSocket1.Close в обработчике OnError() не замечаешь ? разные же объекты !!


 
Гость   (2004-09-02 13:23) [4]

Digitman ©   (02.09.04 13:18) [3]

procedure TForm1.ClientSocket1Error(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
ErrorCode:=0;
Socket.Close;
Timer1.Enabled:=True;
end;

Теперь вообще к серверу не подключается если сервер был запущен после клиента ,память все равно жрет но намного медленнее интервал таймера =1000 мс
????


 
Мюмзик в мове   (2004-09-02 13:33) [5]

возьми стандартный пример, если глючит, значит все плохо


 
Гость   (2004-09-02 13:45) [6]

нету у меня примеров по сокетам в д7
Люююди пожайлуста напишите мне как ЭТО сделать иначе через час мне уже поможет только психушка


 
VID ©   (2004-09-02 13:46) [7]

делай так

procedure TForm1.Timer1Timer(Sender: TObject);
begin
 Timer1.Enabled := False; //И не спрашивай почему :)
 if ClientSocket1.Active then exit;
 ClientSocket1.Open;
end;

procedure TForm1.ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
begin
 здесь с таймером ничего не нужно делать
end;

procedure TForm1.ClientSocket1Error(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
 ErrorCode:=0;
 Socket.Close;
 //Timer1.Enabled := true; Раскоментируй эту строчку только если таймер не активизируется после первой неудачной попытки коннеткта. Хотя по идее эта строчка не нужна вообще то ...
end;

procedure TForm1.ClientSocket1Disconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
 Timer1.Enabled:=True;
end;


 
Digitman ©   (2004-09-02 14:08) [8]

можно и так (в предположении что св-ва Host и/или Service заведомо корректны):

procedure TForm1.Timer1Timer(Sender: TObject);
begin
//стартуем механизм коннекта с асинхр.нотификацией о событиях
ClientSocket1.Open;
end;

procedure TForm1.ClientSocket1Connecting(Sender: TObject;
Socket: TCustomWinSocket);
begin
//это событие будет возбуждено немедленно и безусловно после успешного СТАРТА механизма коннекта
Timer1.Enabled := False; //выключим таймер, пока ничего не известно о результатах попытки коннекта, он нам не нужен
end;

procedure TForm1.ClientSocket1Error(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
//возникло событие отказа коннекта по каким-то причинам - в дан.случае нам безразлично каким - мы уверены что Host корректен
ErrorCode:=0; //предотвращаем вывод окна с сообщением об отказе коннекта
Socket.Close;
Timer1.Enabled := true;
end;

procedure TForm1.ClientSocket1Disconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
//только если нужен автоРЕконнект после дисконнекта сервера по его инициативе !!
Timer1.Enabled:=True; //через 1 сек будет возбуждено событие OnTimer
end;


 
VID ©   (2004-09-02 15:21) [9]

Digitman ©   (02.09.04 14:08) [8]
У меня вопрос небольшой...

Я вот в своём примере написал так

procedure TForm1.ClientSocket1Error(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
ErrorCode:=0;
Socket.Close;
//Timer1.Enabled := true; Раскоментируй эту строчку только если таймер не активизируется после первой неудачной попытки коннеткта. Хотя по идее эта строчка не нужна вообще то ...
end;

Т.е. Timer1.Enabled := True я считаю ненужным, потому что вызов Socket.Close, как мне кажется автоматически вызовет Clientsocket1.OnDisconnect, а там у нас произойдёт включение таймера.

Т.е. с  моей т.з. в примере, приведённом тобою, плучается что в OnError сначал будет закрыт сокет (а там уже включится таймер), а потом следующей строчкой в OnError будет предпринята ещё одна попытка включения таймера.

Как мне кажется если в OnError стоит безусловный вызов Socket.Close то событие OnDisconnect всегда будет инициировано после вызова Socket.Close в обработчике OnError.

Вопрос такой: я прав или нет ? Если нет, то почему ?


 
Digitman ©   (2004-09-02 16:33) [10]


> VID ©   (02.09.04 15:21) [9]


да вариантов-то - куча

важно поредставлять себе последовательность возбуждения событий в том либо ином случае



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

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

Наверх




Память: 0.49 MB
Время: 0.056 c
14-1094148392
SV
2004-09-02 22:06
2004.09.19
Тряхнуть стариной...


14-1093953233
lipskiy
2004-08-31 15:53
2004.09.19
На каком максимальном расстоянии срабатывает смарт-карта в метро?


14-1093664170
Думкин
2004-08-28 07:36
2004.09.19
С днем рождения! 28 августа


14-1093770941
able
2004-08-29 13:15
2004.09.19
Вопрос по ноутбукам.


8-1088598277
sashok
2004-06-30 16:24
2004.09.19
Координаты рисунка MediaPlayer