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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 27.02.2008, 20:23   #1
RoamingFire
 
Регистрация: 25.01.2008
Сообщений: 8
По умолчанию Небольшая проблема с сокетами

Короче такая проблема. Мне нужно в одной процедуре соединиться с сервером и сразу же отправить сообщение на сервер (т.е. в той же процедуре, где происходит соединение с сервером). Но соединение происходит только, когда эта функция завершается... Мне посоветовали использовать функцию "Application.ProcessMessages;" - но все равно не помогает... Вот проблемный кусок кода:
Код:
    SystemSocket.Host := Ip;
    SystemSocket.Active := True;
    Application.ProcessMessages;
    if SystemSocket.Active then
    begin
      Msg := 'Reg '+Name+'|'+Pswd;
      SystemSocket.Socket.SendText(Msg);      
    end
Помогите пожалуйста! Буду очень благодарен!
RoamingFire вне форума
Старый 27.02.2008, 21:19   #2
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Active становится = true практически сразу после присвоения. После этого происходит масса разной работы (что нас не интересует) и в случае неудачи соединения с сервером возникает асинхронная ошибка (вызывается метод onError). То есть эдать сообщения об ошибке бессмысленно - ее может и не быть, а на Active полагаться нельзя.
Я тоже с этим сталкивался. Решил проблему следующим образом:

На сервере сразу при подключении клиента (onClientConnect) сервер отправляет клиенту подтверждение - любое сообщение Socket.Send(...

Клиент устанавливает Active := true и ожидает подтверждения от сервера или OnError:

примерно:

Код:
isConnected := false;
isError := false;

procedure  onError
begin
   isError := true
end;

procedure onRead 
begin
   isConnected := true;
end;

Active := true;
while true do begin
   Application.ProcessMessage;
   if isConnected or isErorr then break;
end;

if isConnected then Send ...
alexBlack вне форума
Старый 27.02.2008, 21:38   #3
RoamingFire
 
Регистрация: 25.01.2008
Сообщений: 8
По умолчанию

Спасибо большое!
RoamingFire вне форума
Старый 27.02.2008, 22:58   #4
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

Один вопрос- одна тема.
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума
Закрытая тема


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

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Небольшая проблема.Детранслитератор Ivanich Помощь студентам 6 17.05.2009 19:59
Работаю с текстовым файлом есть небольшая проблема Parcenson Общие вопросы Delphi 2 13.08.2008 06:46
работа с сокетами, содержимое пакетов fire64 C/C++ Сетевое программирование 1 15.03.2008 08:38
Помогите с сокетами delphier Работа с сетью в Delphi 0 19.08.2007 19:03
Работа с сокетами vasilii_terkin Работа с сетью в Delphi 2 13.02.2007 11:08