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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.09.2007, 20:39   #1
Pedro
Форумчанин
 
Аватар для Pedro
 
Регистрация: 25.03.2007
Сообщений: 166
По умолчанию помогите idtcpIP

Категорически всех приветствую! Проблема такая: как то я написал чат для локалки с помощью tclientsocket & tserversocket, теперь я хочу сделать это в indy. Мне нужно постоянно проверять пришло ли сообщение от других юзеров, но если я вызываю idtcpip1.readln тогда, когда ничего не пришло, прога виснит. Как вызывать idtcpip1.readln именно тогда, когда сообщение приходит?
Pedro вне форума Ответить с цитированием
Старый 20.09.2007, 15:34   #2
Pitbull
детский тренер
Форумчанин
 
Аватар для Pitbull
 
Регистрация: 08.06.2007
Сообщений: 532
По умолчанию

Udp не катит для чата?
ну тут нужно исключение влепить... Наверное, так:

with IdTCPClient do
begin
try
connect;
writeln();
.....
otvet:=readLn;
....

except
disconnect;
end;

ну слысл такой: конектишься, если нет связи, то дисконект....
Ведь сервер вы настраиваете на IdTCPServerexecute(AThread:TidPeerT hread), тоесть если клиент делает запрос и есть связь, то сервер ответит.... он не ответит в том случае, когда нет соединения....
Я злой и страФный серррый воФк, и в пАрАсятах знаю толк - ppp ppp pp p pp pp

Последний раз редактировалось Pitbull; 20.09.2007 в 15:38.
Pitbull вне форума Ответить с цитированием
Старый 20.09.2007, 18:44   #3
OrdJONY
.NET-чик
Форумчанин
 
Аватар для OrdJONY
 
Регистрация: 24.03.2007
Сообщений: 569
По умолчанию

У Клиента есть такое событие как OnWork и OnStatus. То проверку что сервер ответил наверное лучше сделать на OnWorkEnd либо попробуйте на OnStatus.
Если с сервера нужно ответить именно определенному клиенту то тут лучше использовать его (AThread:TidPeerThread). Совет, когда клиент коннектится, то сохранят полностью весь AThread, а ответ потом делается вот так AThread.Connection.ReadLn(); Это если к примеру на клиенте запущено 2 проги клиента, чтобы ответ пришел именно тому куда надо
"Разработка под веб - как работа с пылесосом: нихрена не прикольно, но засасывает"
Мо маленький городок
OrdJONY вне форума Ответить с цитированием
Старый 20.09.2007, 19:47   #4
Pedro
Форумчанин
 
Аватар для Pedro
 
Регистрация: 25.03.2007
Сообщений: 166
По умолчанию

Если делаю исключение или проверку в событии onStatus - прога так же виснит. На события OnWork, OnWorkBegin, OnWorkEnd - не как не реагирует. Может есть еще какието способы? Подскажите пожалуйста.
Pedro вне форума Ответить с цитированием
Ответ


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