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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.04.2011, 07:03   #1
ManowarVIP
Новичок
Джуниор
 
Регистрация: 07.04.2011
Сообщений: 1
Печаль Непонятная ситуация с количеством подключений TServerSocket

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

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

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

Писал под RAD 2009, но пробовал и под D6 запускать - проблема та же.

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

Код:
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;
ManowarVIP вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Непонятная ситуация с ПО Pando hk47 Софт 0 18.06.2010 20:46
Проверка подключений к порту Horus92 Работа с сетью в Delphi 0 11.01.2010 17:13
логи подключений joker Безопасность, Шифрование 3 08.12.2008 19:50
Работа со списком сетевых подключений zanneo Win Api 2 15.08.2008 10:51
Создание подключений Квэнди Работа с сетью в Delphi 0 01.02.2007 13:38