Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Интернет и сети
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 07.04.2011, 01:33
ManowarVIP ManowarVIP вне форума
Прохожий
 
Регистрация: 07.04.2011
Адрес: Россия, Пермь
Сообщения: 1
Версия Delphi: 6, 2009
Репутация: 10
Печаль Непонятная ситуация с количеством подключений TServerSocket

Здравствуйте!

Пишу многопоточный сервер на TServerSocket.
В принципе все реализовал, но при тестовых прогонах не пробовал более 3-6 подключений, а в момент генерального теста подключений было более 10 и вдруг выяснилось, что реально могут работать только 8 соединений.
Когда начал разбираться, оказалось, что начиная с 9 соединения новый поток создается, но данные от клиента не приходят и возникает таймаут на этой строке: if (not Terminated) and (not fSocketStream.WaitForData(TIMEOUT)) then

Подскажите пожалуйста, в чем может быть причина?

Вот основной код потока:

Код:
procedure TServerThread.ClientExecute;
var fRequest  : AnsiString;
      p              : Integer;
begin
 
  try
 
    fSocketStream:=TWinSocketStream.Create(ClientSocket,TIMEOUT);
    try
 
      while (not Terminated) and (ClientSocket.Connected) do
        try
          if (not Terminated) and (not fSocketStream.WaitForData(TIMEOUT)) then
          begin
             ClientOff(msg_Connection_Timeout);
             break;
          end;
 
          if (not Terminated) then
          begin
 
             fRequest:='';
             if fSocketStream<>nil then begin
                SetLength(fRequest,ClientSocket.ReceiveLength());
                SetLength(fRequest,ClientSocket.ReceiveBuf(Pointer(fRequest)^,Length(fRequest)));
             end
              else begin
               ClientOff(msg_Connection_Closed);
               break;
             end;
 
             p:=Pos(Chr($0D),fRequest);
 
             if (p>0) and (not Terminated) then begin
 
               //Обработка пакетов
 
             end
              else begin
                 ClientOff(msg_Connection_Closed);
              end;
          end;
 
          Application.ProcessMessages;
 
        except
          on e:exception do
          begin
            ClientOff(msg_Connection_Closed);
          end;
        end;
    finally
      ClientOffmsg_Connection_Closed);
    end;
  except
    on e:exception do
    begin
      ClientOff(msg_Connection_Closed);
    end;
  end;
 
  inherited;
 
end;
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 11:05.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter