|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Stack overflow в чате
Здравствуйте, делаю чат(клиент-сервер) в Delphi 7 на сокетах. После каких то(ошибку обнаружил не сразу) изменений в проекте, на сервере стала появляться ошибка Stack overflow. Обнаружил ее после того, как несколько раз зашел/отключился клиентом от сервера. Ошибка возникает через рандомное количество отключений от сервера. Сам локализовать ошибку не могу, поэтому прошу вас посмотреть проект(http://revengers.3dn.ru/raznoe/Project.rar).
В проекте используются компоненты dcpcrypt2 и Alphaskin, оба они лежат в папке. P.s. Не откажусь от конструктивных замечаний по проекту. |
#2
|
|||
|
|||
Я нашел где происходит ошибка, она происходит в процедуре на 124 строке(ServerSocket1ClientDisconnect). Когда пользователь выходит, запускается процедура ServerSocket1ClientDisconnect, но по какой то причине она входит в бесконечный цикл.
Я так и не понял чем это вызвано. Надеюсь на вашу помощь. |
#3
|
|||
|
|||
Никаких Disconnect или Connected := False не вызываешь в этом обработчике (код не смотрел - выложи только этот кусок в тело поста).
|
#4
|
|||
|
|||
Код:
procedure TForm1.ServerSocket1ClientDisconnect(Sender: TObject; Socket: TCustomWinSocket); var i:integer; mes:string; begin k:=k+1; debug(IntToStr(k));//Сделал для выявления цикла, на код программы не влияет. `ListBox1.Items.Clear; for i:=0 to (ServerSocket1.Socket.ActiveConnections-1) do ServerSocket1.Socket.Connections[i].SendText('<S>'); end; |
#5
|
||||
|
||||
А если погулять по коду процедуры трейсом, не получится выявить условие зависания?
Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |