Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2003.08.11;
Скачать: [xml.tar.bz2];

Вниз

Сокеты ERROR 10055, диплом горит   Найти похожие ветки 

 
ALeXiuS   (2003-06-05 13:34) [0]

Когда клиент в неблокирующем режиме пытается соединиться с сервером, если ответа от сервера нет то по таймеру

Client.Active:=false; Client.Active:=true; на 240 попытке возникает ошибка сокета, мол очередь сокета забита
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if ClientSocket1.Socket.Connected = false then
begin
ClientSocket1.Active:=false;
ClientSocket1.Active:=true;
end;
end;
Нужно чтобы клиент быстро определял Сервер активен или нет.
К примеру: Сервер работает, клиент установил с ним связь, но тут сервак падает, и не происходит события OnDisconnect, и необходимо отловить неактивность сервера.


 
Digitman   (2003-06-05 14:14) [1]

Timer1.Active := False; // начальное значение

...

делаем АСИНХРОННУЮ (!!!) попытку соединения

ClientSocket1.Open;

...


в обработчике OnError() :

ErrorCode := 0; // ошибка нас не интересует
Socket.Disconnect(Socket.SocketHandle); // освободим ресурсы
Timer1.Active := True; // стартуем таймер

в обработчике OnTimer() :

Timer1.Active := False; // останов таймера
ClientSocket1.Open; // повторяем попытку соединения





 
ALeXiuS   (2003-06-05 19:41) [2]

// CUT BEGIN=====================================================
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Buttons, ScktComp, ToolWin, ComCtrls, StdCtrls, ExtCtrls;

type
TForm1 = class(TForm)
Memo1: TMemo;
StatusBar1: TStatusBar;
ClientSocket1: TClientSocket;
Timer1: TTimer;
procedure ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
procedure ClientSocket1Error(Sender: TObject; Socket: TCustomWinSocket;
ErrorEvent: TErrorEvent; var ErrorCode: Integer);
procedure Timer1Timer(Sender: TObject);
procedure FormShow(Sender: TObject);
private
{ Private declarations }
Server:String;
ClientName:String;
public
{ Public declarations }
end;

var
Form1: TForm1;
i : integer =0;
j : integer =0;
implementation

{$R *.DFM}

procedure TForm1.FormShow(Sender: TObject);
begin
Timer1.Enabled:=false;
Timer1.Interval:=5000;

if ClientSocket1.Active then ClientSocket1.Active:=false;
ClientSocket1.Address:="10.10.10.1";
ClientSocket1.Port:=1024;
ClientSocket1.ClientType:=ctNonBlocking;
ClientSocket1.Active:=true;

Timer1.Enabled:=true
end;

procedure TForm1.ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
begin
with ClientSocket1 do
StatusBar1.Panels[0].Text := "Подсоединились к: " + Socket.RemoteHost +
" IP: " + Socket.RemoteAddress;
end;

procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
begin
Memo1.Lines.add( Socket.ReceiveText );
end;

procedure TForm1.ClientSocket1Error(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
inc(i);
Memo1.Lines.Add("Ошибка соединения: " + Server +" ERROR CODE :"+IntToStr(ErrorCode));
StatusBar1.Panels[0].Text := "Ошибка соединения по ERROR CODE " + IntToStr(i)+" раз...";
ErrorCode:=0;
{по совету Digitman"a}
ClientSocket1.Socket.Disconnect(ClientSocket1.Socket.Handle);
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
if ClientSocket1.Socket.Connected = false then
begin
ClientSocket1.Close;
inc(j);
Memo1.Lines.Add("Ошибка соединения по времени , пробую "+IntToStr(j)+" раз...... ");
ClientSocket1.Open;
end;
end;
end.
// CUT END============================================
Сделал так и ничего не получается, в конечном итоге всегда вылетает 10055(An operation on a socket could not be performed because the system lacked sufficient buffer space or because a queue was full.)
Может кто подскажет что надо сделать, что бы эта фигня работала...
Заранее огромное спасибо.


 
Digitman   (2003-06-06 08:20) [3]

procedure TForm1.Form Create(Sender: TObject);
begin
Timer1.Enabled:=false; // !!!!!!!!!!!!! установить в design-time
Timer1.Interval:=5000;

ClientSocket1.Active:=false; // !!!!!!!!!!!!! установить в design-time
ClientSocket1.Address:="10.10.10.1";
ClientSocket1.Port:=1024;
ClientSocket1.ClientType:=ctNonBlocking;
ClientSocket1.Active:=true;

end;

procedure TForm1.ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
begin
with ClientSocket1 do
StatusBar1.Panels[0].Text := "Подсоединились к: " + Socket.RemoteHost +
" IP: " + Socket.RemoteAddress;
end;

procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
begin
Memo1.Lines.add( Socket.ReceiveText );
end;

procedure TForm1.ClientSocket1Error(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
inc(i);
Memo1.Lines.Add("Ошибка соединения: " + Server +" ERROR CODE :"+IntToStr(ErrorCode));
StatusBar1.Panels[0].Text := "Ошибка соединения по ERROR CODE " + IntToStr(i)+" раз...";
ErrorCode:=0;
Socket.Disconnect(Socket.Handle);
Timer1.Enabled:=True; // !!!!!!!!!!!!! через заданный интервал таймер возобновит попытку соединения
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
Timer1.Enabled:=false; // отключим таймер
inc(j);
Memo1.Lines.Add("Ошибка соединения, пробую "+IntToStr(j)+" раз...... ");
ClientSocket1.Open;
end;



 
ALeXiuS   (2003-06-06 10:14) [4]

Это конечно хорошо но на 251 попытке соединения та же ошибка 10055


 
Digitman   (2003-06-06 10:23) [5]

миль пардон

Socket.Disconnect(Socket. SocketHandle);


 
ALeXiuS   (2003-06-06 13:06) [6]

Все РАБОТАЕТ!!!!!!!!!!!!!!
УРА!!!!!!
Огромное спасибо DIGITMAN"у



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

Форум: "Сети";
Текущий архив: 2003.08.11;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.007 c
3-33082
xBocT
2003-07-17 15:18
2003.08.11
Ошибочка при работе с AdoDataSet


1-33128
Last
2003-07-30 11:38
2003.08.11
Filter


14-33360
Мазут Береговой
2003-07-25 09:02
2003.08.11
Давненько я не был здесь! Как у вас тут все изменилось!


14-33299
Viktor Kushnir
2003-07-24 07:45
2003.08.11
Алгоритм


14-33308
BOA_KAA
2003-07-24 16:36
2003.08.11
О http://www.certifications.ru/





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский