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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> TClientSocket странно работает Connect, Нельзя вызвать Connect и SendText сразу 
:(
    Опции темы
anikss
Дата 7.11.2005, 19:37 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Здравствуйте! Наткнулся на такую проблему, решения которой не знаю. Нужно, чтобы TClientSocket в неблокирующем режиме соединился с сервером и сразу же отправил ему сообщение. Я пытался использовать такую процедуру:

Код

procedure TForm1.Button8Click(Sender: TObject);
begin
  CS.Open;
  repeat until CS.Active=True;
  CS.Socket.SendText('Message');
end;


где CS - и есть компонент типа TClientSocket, но соединение вообще не происходит до окончания исполнения этой процедуры, оно происходит сразу после окончаня ее исполнения. Соответственно, цикл repeat until... будет ждать коннекта вечно. Подскажите пожалуйста варианты решения этой проблемы. Только вариант с использованием события OnConnect я уже обнаружил, жаль, он не подходит, из-за него код разваливается на 2 части.
Заранее спасибо!
  Вверх
Демо
Дата 7.11.2005, 21:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

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



Цитата(anikss @ 7.11.2005, 20:37)
repeat until CS.Active=True;


Во время цикла твое приложение обрабатывает поступающие WIn-сообщения?


--------------------
    
PM MAIL ICQ Skype   Вверх
Демо
Дата 7.11.2005, 21:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

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



Цитата(anikss @ 7.11.2005, 20:37)
жаль, он не подходит, из-за него код разваливается на 2 части.


На этом построены практически все варианты работы с сокетами. Непонятно, чем это не устраивает.

А в приведенном выше коде достаточно в цикл добавить Application.ProcessMessages;
Но это будет называться просто извращение, так как программа, вместо того, чтобы среагировать а OnConnect вхолостую крутит дурацкий цикл.:
Код

while not cs.Active do Application.ProcessMessages;



--------------------
    
PM MAIL ICQ Skype   Вверх
anikss
Дата 8.11.2005, 02:18 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Спасибо, завелось как надо! И почему сам не догадался? smile

А насчет зачем - ну просто не люблю я события и вешать на них какие-то серьезные функции. На мой взгляд, код теряет свою наглядность. Лучше поток создать отдельный, и блокировать его не циклом, а WaitFor... - все равно это будет для меня нагляднее, чем гора обработчиков событий, и логика, размазанная по ним.
  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

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

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

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

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

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


 




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


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

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