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

Вниз

проблемы с TServerSocket   Найти похожие ветки 

 
BoxTer   (2004-09-10 08:23) [0]

Доброе время суток. У меня возникла такая ситуация. Прога, рассылающая по таймеру куче клиентов некую строку кодом:
 try
  for i := 0 to ServerSocket1.Socket.ActiveConnections-1 do
       ServerSocket1.Socket.Connections[i].SendText(st);
 except
   on E: Exception do Begin
     Memo1.Lines.Add(DateTimeToStr(now)+" "+InttoStr(E.HelpContext)+", "+E.Message);
   exit;
   end;
 end;

в обработчике ошибок ServerSocket1ClientError

 Memo1.Lines.Add(DateTimeToStr(now)+" - Ошибка "+Inttostr(ErrorCode));
 if ErrorCode=10054 then Begin
     Socket.Disconnect(0);
     ErrorCode:=0;
 end;
уnd;

вываливает ошибку 10054. В MSDN глянул - там все понятно, неудачно отключается клиент. Все клиентские проги обновить просто не смогу - их множество. Даже не смотря на обнуление ошибки, сервер через некоторое время останавливается.
Причем, E.Message выдает "Вышел за пределы границ(-1)"...
Как мне справиться с этим на сервере?


 
BoxTer   (2004-09-10 08:24) [1]

и убирание строки из обработчика ошибок Socket.Disconnect(0); на работу никак не влияет...


 
BoxTer   (2004-09-10 09:01) [2]

E.Message выдает "Вышел за пределы границ(-1)" после каждой отправки на клиентов... т.е. на отправке except вываливается каждый раз после негоего неудачного отключения юзера...


 
Digitman ©   (2004-09-10 09:27) [3]

а E.ClassName что говорит ?


 
Verg ©   (2004-09-10 10:28) [4]

Socket.Disconnect(0);

Что за ноль?

Socket.Close;


 
BoxTer   (2004-09-10 11:45) [5]

2DigitMan: грит 0
2Verg: пробовал, не помогает!


 
Digitman ©   (2004-09-10 12:13) [6]


> грит 0


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

E.Message ты прочитал ? ну точно так же и в том же месте прочитай E.ClassName ! Это - важная инф-ция .. поважней, пожалуй, чем E.Message ...
а "Вышел за пределы границ(-1)" мне пока ни о чем не говорит


 
NAlexey ©   (2004-09-13 10:18) [7]

>BoxTer   (10.09.04 08:23)  
Я бы предположил что во время работы цикла меняется количество активных подключений. Попробуй поместить его в критическую секцию.


 
BoxTer   (2004-09-13 11:52) [8]

2DigitMan: EStringListError - причем тут это? ниче не понимаю!
2NAlexey: дык там и стоит try...


 
Digitman ©   (2004-09-13 12:14) [9]


> EStringListError - причем тут это?


где-то в своей программе ты обращаешься к объекту класса TStringList к элементу, индекс которого выходит за пределы диапазона 0..StringList.Count - 1


 
BoxTer   (2004-09-13 12:38) [10]

да я в курсе... но в том-то и пирог, что нету такого!
И самое парадоксальное, шо этот класс ошибки вываливается в конструкции:
try
 for i := 0 to ServerSocket1.Socket.ActiveConnections-1 do
      ServerSocket1.Socket.Connections[i].SendText(st);
except
  on E: Exception do Begin
    Memo1.Lines.Add(DateTimeToStr(now)+" "+InttoStr(E.ClassName)+", "+E.Message);
  exit;
  end;
end;


 
VMcL ©   (2004-09-13 12:44) [11]

>InttoStr(E.ClassName)

Это еще что за бред?


 
Digitman ©   (2004-09-13 12:45) [12]


> BoxTer   (13.09.04 12:38) [10]


не знаю ...
при попытке обращения за пределы диапазона индексов списка Connections[] должно возбуждаться искл-е EListError, а не EStringListError .. ибо FConnections - это TList


 
Digitman ©   (2004-09-13 12:49) [13]


> BoxTer


да, действительно ...
см.
> VMcL ©   (13.09.04 12:44) [11]


горбатого лепишь ? код в [10] даже скомпилирован не мог быть, а уж о ран-тайм там и речи вообще не идет ...


 
Verg ©   (2004-09-13 12:54) [14]

Приведи все же код обработчиков событий
OnClientError и OnClientDisconnect;


 
BoxTer   (2004-09-13 13:15) [15]

2VMcL: пардон, я вставлял прям с форума - изменил, да не все :( В проге намана все!

OnClientError:
Memo1.Lines.Add(DateTimeToStr(now)+" - Ошибка "+Inttostr(ErrorCode));
     ErrorCode:=0;


OnClientDisconnect
 Memo1.Lines.Add(DateTimeToStr(now)+" - Отключился: "+Socket.RemoteHost+" c "+Socket.RemoteAddress+";");


 
Verg ©   (2004-09-13 13:39) [16]

ServerSocket1.ServerType = ?


 
BoxTer   (2004-09-13 14:55) [17]

stNonBlocking


 
Digitman ©   (2004-09-13 15:08) [18]

for i := ServerSocket1.Socket.ActiveConnections-1 downto 0 do
 try
   ServerSocket1.Socket.Connections[i].SendText(st);
 except
 end;


 
Verg ©   (2004-09-13 16:37) [19]


> [17] BoxTer   (13.09.04 14:55)
> stNonBlocking


Ну чудеса, да и только. :)
При ошибке на передаче происходит вызов Disconnect у такого сокета. Но собственно free у него вызывается отложенно (DeferFree). Тем не менее, в твоем случае дело каким-то образом доходит все же до реального Free у сокета в пределах цикла.
Либо ты что-то недопоказываешь нам, считая, что ошибки там быть не может точно, либо грабли вообще совершенно в другом месте, либо что-то путаешь.


 
BoxTer   (2004-09-14 10:29) [20]

Нет, выложил все шо есть!


 
Verg ©   (2004-09-14 10:39) [21]

Все - это когда от begin-а до end-а, а не

> OnClientError:
> Memo1.Lines.Add(DateTimeToStr(now)+" - Ошибка "+Inttostr(ErrorCode));
>      ErrorCode:=0;
>
> OnClientDisconnect
>  Memo1.Lines.Add(DateTimeToStr(now)+" - Отключился: "+Socket.RemoteHost+"
> c "+Socket.RemoteAddress+";");


 
BoxTer   (2004-09-14 12:03) [22]

2Verg... ну добавь мысленно ;) их


 
Digitman ©   (2004-09-14 12:18) [23]


> либо грабли вообще совершенно в другом месте


да они и есть в другом месте !

ума не приложу, в каком месте кода scktcomp.pas можно обнаружить строчку raise EStringListError.Create либо прямую или косвенныю ссылку на объект TStringList, который способен сгенерировать это исключение


 
les ©   (2004-10-18 12:28) [24]

Ошибка 11004 в сокете что это



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

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

Наверх





Память: 0.5 MB
Время: 0.035 c
3-1102308410
tERRORist
2004-12-06 07:46
2005.01.02
Как вытащить Login и Password из уже установленного ADOConnection


1-1102916098
Navi
2004-12-13 08:34
2005.01.02
Как записать метафайл в нетипизированный файл?


6-1094790228
BoxTer
2004-09-10 08:23
2005.01.02
проблемы с TServerSocket


4-1100520863
Tria
2004-11-15 15:14
2005.01.02
Как из моей проги открыть html-файл в броузере по-умолчанию?


3-1102320458
stud
2004-12-06 11:07
2005.01.02
использование хранимых процедур





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