Модераторы: Snowy, Poseidon, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблемма при работе с блокирующим сокетом, Сокеты 
:(
    Опции темы
Vinni37
Дата 9.2.2011, 00:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 25.6.2008

Репутация: нет
Всего: нет



Во общем проблема в следующем, у меня северный сокет блокирующий (stThreadBlocking) (Писал этот сервер не я, я пытаюсь с ним только разобраться), у сокета выставлено OnAccept := ClientAccept, в ClientAccept создается поток следующего типа:
Код

TClientThread =
    class (TThread)
      private
        fClientSocket: TCustomWinSocket;
        Function SendPacket(Reply: pPacket; ReplyData: pointer = nil): Bool;
      public
      protected
        procedure Execute; override;
    end;

Куда в fClientSocket записывается TCustomWinSocket который передается при OnAccept.
После старта нового потока в Execute происходит в цикле while чтение из сокета что то типа этого:
Код

While fClientSocket.ReceiveBuf(Request, SizeOf(TPacket)) = SizeOf(TPacket) do
  begin
     //тут обрабатывается запрос
  end;

Собственно 99% времени сокет находится в заблокированном состоянии ожидая запроса от  клиента.
Вот тут то и возникает проблема что иногда требуется отправить клиенту пакет для этого вызывается SendPacket клиентского потока, и как только дело доходит до fClientSocket.SendBuf он естественно зависает так как первым было вызвано чтение из сокета, и отправка идет только когда клиент что нибудь пришлет. Как это обойти при использовании блокирующих сокетов. За ранее спасибо.
PM MAIL   Вверх
MetalFan
Дата 9.2.2011, 09:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 14
Всего: 128



емнип, у TCustomWinSocket есть функции проверки, есть ли что в буффере входящем. Точно не скажу, как называются - делфи под рукой нет.

Это сообщение отредактировал(а) MetalFan - 9.2.2011, 09:53


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0391 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.