Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.03.2010, 11:45   #1
MyIE
Форумчанин
 
Аватар для MyIE
 
Регистрация: 02.01.2010
Сообщений: 127
По умолчанию ServerSocket - Ошибка "Stack oferflow"

Использую ServerSocket/ClientSocket для многопользовательского чата, когда народу к чату коннектится более 5-ти, и они начинают слать сообщения, то сервер выдает такую ошибку "Stack oferflow"(возможна опечатка ) и программа (сервер) завершает работу.
Что это и как с этим бороться?
0_o

Последний раз редактировалось MyIE; 28.03.2010 в 15:31.
MyIE вне форума Ответить с цитированием
Старый 28.03.2010, 14:29   #2
prizrak1390
-=PriZraK=-
Форумчанин
 
Аватар для prizrak1390
 
Регистрация: 12.12.2007
Сообщений: 399
По умолчанию

MyIE, в обработчиках событий у тебя что?
prizrak1390 вне форума Ответить с цитированием
Старый 28.03.2010, 14:36   #3
MyIE
Форумчанин
 
Аватар для MyIE
 
Регистрация: 02.01.2010
Сообщений: 127
По умолчанию

Сервер

OnClientConnect:
Код:
procedure TForm1.ServerSocketClientConnect(Sender: TObject;
  Socket: TCustomWinSocket);
var
i: integer;
begin
Connections:= Connections+1;
LogWrite(TimeToStr(Time)+' - User Connected, all user='+IntToStr(Connections));
LabelConnections.Caption:= 'Ползователей в сети: '+IntToStr(Connections);

For i:=0 to ServerSocket.Socket.ActiveConnections-1 do
Begin
	ServerSocket.Socket.Connections[i].SendText('#onl# '+IntToStr(Connections));
end;
end;
OnClientDisconnect:
Код:
procedure TForm1.ServerSocketClientDisconnect(Sender: TObject;
  Socket: TCustomWinSocket);
var
i: integer;
begin
if Connections>0 then
	Connections:= Connections-1;
LogWrite(TimeToStr(Time)+' - User Disconnected, all user='+IntToStr(Connections));
LabelConnections.Caption:= 'Ползователей в сети: '+IntToStr(Connections);

For i:=0 to ServerSocket.Socket.ActiveConnections-1 do
Begin
	ServerSocket.Socket.Connections[i].SendText('#onl# '+IntToStr(Connections));
end;
end;
OnClientError:
Код:
procedure TForm1.ServerSocketClientError(Sender: TObject;
  Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
  var ErrorCode: Integer);
begin
LogWrite(TimeToStr(Time)+' - Error #'+IntToStr(ErrorCode));
ErrorCode:= 0;
end;
OnClientRead:
Код:
procedure TForm1.ServerSocketClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
var
s:string;
i: integer;
begin
s:=Socket.ReceiveText;
  For i:=0 to ServerSocket.Socket.ActiveConnections-1 do
      ServerSocket.Socket.Connections[i].SendText('['+TimeToStr(Time)+'] '+s);
ParseString('['+TimeToStr(Time)+'] '+s);
RVChat.FormatTail;
RVChat.Update;
end;
Остальные пустые.
0_o
MyIE вне форума Ответить с цитированием
Старый 28.03.2010, 14:52   #4
prizrak1390
-=PriZraK=-
Форумчанин
 
Аватар для prizrak1390
 
Регистрация: 12.12.2007
Сообщений: 399
По умолчанию

Код:
ParseString('['+TimeToStr(Time)+'] '+s);
RVChat.FormatTail;
RVChat.Update;
Расскажите нубу, что это?!)
prizrak1390 вне форума Ответить с цитированием
Старый 28.03.2010, 15:24   #5
MyIE
Форумчанин
 
Аватар для MyIE
 
Регистрация: 02.01.2010
Сообщений: 127
По умолчанию

Да это на сервере есть TRichView, вот прост туда посты заносятся.
------------
Скрин ошибки присутствует в посте.
Изображения
Тип файла: png screen_error_chat.png (7.0 Кб, 198 просмотров)
0_o
MyIE вне форума Ответить с цитированием
Старый 29.03.2010, 10:32   #6
MyIE
Форумчанин
 
Аватар для MyIE
 
Регистрация: 02.01.2010
Сообщений: 127
По умолчанию

Ну что, кто-нить знает ответ? prizrak?)
0_o
MyIE вне форума Ответить с цитированием
Старый 04.04.2010, 13:01   #7
prizrak1390
-=PriZraK=-
Форумчанин
 
Аватар для prizrak1390
 
Регистрация: 12.12.2007
Сообщений: 399
По умолчанию

MyIE, нетипичная ошибка для серверсокета и клиентсокета. Попробуй закомментировать например этот код:

Цитата:
ParseString('['+TimeToStr(Time)+'] '+s);
RVChat.FormatTail;
RVChat.Update;
prizrak1390 вне форума Ответить с цитированием
Старый 04.04.2010, 19:23   #8
MyIE
Форумчанин
 
Аватар для MyIE
 
Регистрация: 02.01.2010
Сообщений: 127
По умолчанию

Окей, попробую, поставлю пока вместо TRichView обычный Memo От него я думаю такой проблемы не будет.
0_o
MyIE вне форума Ответить с цитированием
Старый 06.04.2010, 21:55   #9
MyIE
Форумчанин
 
Аватар для MyIE
 
Регистрация: 02.01.2010
Сообщений: 127
По умолчанию

Такая же ошибка вылазит ( Еще есть идеи?)
0_o
MyIE вне форума Ответить с цитированием
Старый 24.06.2010, 00:11   #10
casper0094
Пользователь
 
Регистрация: 19.03.2010
Сообщений: 31
По умолчанию

В школе решаю задачи на free pascal и вот когда пользуешся рекурсивной функцие достаточно большой то бывает такая ошибка так как выполнение следуюшей рекурсии кидается в стек и когда рекурсивных вызовов оч много вылетает ошибка "стек переполнен". Так вот моё мнение что слишком много сообшений большого размера сразу и дут, мне кажется что каждое сообшение стаёт в стек и ждёт своей очереди и вот получается ошибка. В школе в программах я создаю искуственную очередь правда тут я не знаю как это сделать, но я где-то слышал про потоки и вот если удастся каждому клиенту выделить свой поток который обрабатывал бы своего клиента то может быть всё бы и прокатило)))
casper0094 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ClientSocket и ServerSocket Hacker19_90 Работа с сетью в Delphi 1 23.03.2010 01:17
Есть ли у IdTCPServer такое свойство как у ServerSocket: ServerSocket.Socket.ActiveConnectio ns? TwiX Работа с сетью в Delphi 3 07.03.2010 14:28
ClientSocket и ServerSocket KoBRaAndrey Работа с сетью в Delphi 4 08.01.2010 19:21
ServerSocket HTL Работа с сетью в Delphi 2 02.01.2010 22:40
ServerSocket и ClientSocket Sensizu Работа с сетью в Delphi 5 30.12.2009 00:09