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

Вниз

Все та же ошибка 10055 при попытке подключения TClientSocket   Найти похожие ветки 

 
Sregey   (2001-11-22 17:49) [0]

Как продолжение беседы "Ошибки при попытке подключения TClientSocket".
Пытаюсь получить список открытых портов ЛЮБОЙ локальной машины.
На 249 порту выходит ошибка 10055 (No buffer space is available.)
Вот исходник:
procedure TForm1.Button1Click(Sender: TObject);
var i: Integer;
begin
if Button1.Caption = "Start" then begin
Button1.Caption:= "Stop";
ListBox.Items.Clear;
Nxt:= true;
Client.Host:= Edit1.Text;
i:= SpinEdit1.Value;
Quit:= false;
Repeat
if Nxt then begin
Label2.Caption:= "Port:"+IntToStr(i);
Nxt:= false;
Client.Port:= i;
Client.Open;
Inc(i);
end;
Application.ProcessMessages;
Until Quit or (i > SpinEdit2.Value);
Button1.Caption:= "Start";
end else begin
Quit:= true;
Button1.Caption:= "Start";
end;
Label2.Caption:= "Port:";
Client.Close;
end;

procedure TForm1.ClientSocketConnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
With (Sender as TClientSocket)do begin
Close;
ListBox.Items.Add(IntToStr(Port));
Nxt:= true;
end;
end;

procedure TForm1.ClientSocketError(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
With (Sender as TClientSocket)do begin
ErrorCode:= 0;
Nxt:= true;
end;
end;

procedure TForm1.ClientLookup(Sender: TObject; Socket: TCustomWinSocket);
begin
With (Sender as TClientSocket)do begin
Sleep(100);
Nxt:= true;
end;
end;

end.

Интересно, если не делать Sleep(100), ошибка вылазит на 78 порту.
Помогите, пожалуйста. Где ошибка?
(Диапазон портов задается в SpinEdit1.Value и SpinEdit2.Value;
список открытых портов в ListBox)
Да, и как специалисты, покажите, где программный код не оптимален


 
Polevi   (2001-11-23 09:59) [1]

procedure Next
begin
cs.close;
cs.Port:=cs.Port+1;
cs.Open;
end;

procedure Click;
begin
cs.Open;

procedure OnConnect;
listbox.items.Add(IntToStr(cs.Port);
cs.Next;

procedure OnError;
cs.Next;


 
Hair_Fly   (2001-11-23 10:54) [2]

Буквально вчера приобретенный мной опыт подсказывает, что при возникновении ошибки сокета необходимо закрывать этот сокет:

procedure TForm1.ClientSocketError(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
With (Sender as TClientSocket)do begin
ErrorCode:= 0;
Nxt:= true;
end;
Socket.Close; // Обрати внимание, что именно Socket (TCustomWinSocket),
// а не ClientSocket (TClientSocket)
end;


 
Polevi   (2001-11-23 11:02) [3]

Hair_Fly ©
Это лишнее


 
Digitman   (2001-11-23 11:30) [4]

>Polevi
Нет, не лишнее. Метод Open прежде всего безусловно выделяет ресурсы под новое гнездо (будет оно успешно соединено или нет - на этапе создания гнезда еще неизвестно), в то время как Close безусловно освобождает ресурсы под гнездо, распределенное в Open.
Убедись в этом сам, еще раз заглянув в Scktcomp.pas


 
Sregey   (2001-11-23 18:30) [5]

Спасибо за ответы, тут пока их ждал, следил за перепиской по вопросу
"Ошибки при попытке подключения TClientSocket".
В результате написал следующее:

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

Ошибка стала выдаваться не на 249 порту, а по-позже. И все-равно она ЕСТЬ!

Возможно, она появляется, из-за ассинхронного закрытия - еррор срабатывает значительно позже, за это время открывается МОРЕ портов. Попробовал создать новый код, приостанавливающийся на определенном этапе, пока не будут закрыты часть открытых портов! И все-равно ошибка! Где-то на порту 470-м при скорости 0,7 портов за сек.
Вот исходники, я ничего не понимаю... Никакого удовольствия программировать сеть ... Одни глюки. Что на этот раз не так?

Const MaxLookUp = 10;

type
TForm1 = class(TForm)
ListBox: TListBox;
Panel1: TPanel;
SpinEdit1: TSpinEdit;
SpinEdit2: TSpinEdit;
Label1: TLabel;
Edit1: TEdit;
Button1: TButton;
Label2: TLabel;
Client: TClientSocket;
Label3: TLabel;
procedure Button1Click(Sender: TObject);
procedure ClientSocketConnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure ClientSocketError(Sender: TObject; Socket: TCustomWinSocket;
ErrorEvent: TErrorEvent; var ErrorCode: Integer);
procedure ClientLookup(Sender: TObject; Socket: TCustomWinSocket);
procedure ClientDisconnect(Sender: TObject; Socket: TCustomWinSocket);
private
{ Private declarations }
Nxt,Quit,flLookUp : Boolean;
CountLookUp : Byte;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var i: Integer;
TimeSt, tmp: _SYSTEMTIME;
begin
if Button1.Caption = "Start" then begin
Button1.Caption:= "Stop";
ListBox.Items.Clear;
Nxt:= true;
Client.Host:= Edit1.Text;
i:= SpinEdit1.Value;
Quit:= false;
CountLookUp:= 0; flLookUp:= true;
GetLocalTime( TimeSt);
Repeat
if Nxt then begin
Label2.Caption:= "Port:"+IntToStr(i);
Nxt:= false;
Client.Port:= i;
Client.Open;
Inc(i);
end;

GetLocalTime( tmp);
Label3.Caption:= "скорость: "
+Copy(FloatToStr(((tmp.wDay-TimeSt.wDay)*86400+(tmp.wHour-TimeSt.wHour)*3600+(tmp.wMinute-TimeSt.wMinute)*60+(tmp.wSecond-TimeSt.wSecond))/(i-SpinEdit1.Value)),1,5)
+" : "+IntToStr(CountLookUp);
Application.ProcessMessages;
Until Quit or (i > SpinEdit2.Value);
Button1.Caption:= "Start";
end else begin
Quit:= true;
Button1.Caption:= "Start";
end;
Label2.Caption:= "Port:";
Client.Close;
end;

procedure TForm1.ClientSocketConnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
Client.Close;
Socket.Close; //на всякий случай, но не работает и сней и без нее ...
ListBox.Items.Add(IntToStr(Client.Port));
end;

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

procedure TForm1.ClientLookup(Sender: TObject; Socket: TCustomWinSocket);
begin
if flLookUp then begin
Inc(CountLookUp); flLookUp:= CountLookUp < MaxLookUp;
Nxt:= true;
end;
end;

procedure TForm1.ClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
Dec(CountLookUp);
flLookUp:= true; Nxt:= true;
end;



 
Sregey   (2001-11-26 09:55) [6]

Господа! Однако ошибка не исчезает! Только возникает попозже.
Чего еще не хватает?


 
Gms   (2001-12-11 03:18) [7]

Как я понял то проблема не в ресурса выделяемых под соединение в том, что у тебя прога циклически выполняется и еслиб не
application.procesmessages то вообще б висела !

у меня подозрение такое - ошибки возникающие не обрабатываются в onSocketError в результате общего торможения и не дожидаясь вываливаются уже в то что ты описал !

в доказательсто тому служит :

у меня на компе 380Mhz сканирующая прога иногда глючила а в клубе 900Mhz оная не разу не галюнула из этого следует что в клубе просто успевает обрабатываться эта ошибка цивильно !

Пробывал сканировать в треаде но тоже не получается !


надеюсь что у тебя получится ! отпиши мне на мыло Sregey !



 
Hardward   (2002-01-16 19:50) [8]

Недавно сам искал
Введи в Yandex 10055



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

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

Наверх





Память: 0.48 MB
Время: 0.007 c
3-90782
zombi
2002-03-04 04:48
2002.03.28
поиск подходящих величин в момент ввода?


3-90802
Дима С.
2002-02-28 11:14
2002.03.28
Oracle Call Interface (OCI)


6-91023
Дремучий
2002-01-16 11:03
2002.03.28
Отправка почты (через YAHOO?)


14-91079
M-A-B
2002-02-13 08:52
2002.03.28
СОМ-порт


4-91127
skiph
2002-01-24 11:20
2002.03.28
Скрыть файлы





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский