![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Простой вопросик
Jeck © (2002-05-27 17:48:00)TServerSocket TClientSocket
Приконнектились. Связь разорволась. Потом сного приконнектились. Делаем сенд, не работает. 8( (пока коннект, дисконнект сного не сделаю) Как это устранить?
ole (2002-05-28 09:57:00) [1]Мне тоже было бы интересно узнать другой вариант. :)
Если не ошибаюсь по этой темке уже говорили, но договорились тока до таймаута. Наверняка ВинСоккетзнает, что синхронизация с удаленным клиентом нарушена, но почему-то не дает возможности узнать об этом своими Евентами... :(
Млин, если не ошибаюсь... что-то такое типа CheckConnectionбыло... надо посмотреть...
Еще предложение по текущему вопросу - не отправляй клиенту запрос, пусть клиент сам отправляет синхронизирующие сообщения!!!
Скажем раз в 15 сек. Если ты пытался создавать чат в скриптах - там тот же принцип. Клиент подключен пока у него время последнего опроса не менее ..... скольки-нить...
ole (2002-05-28 09:54:00) [2]Мне тоже было бы интересно узнать другой вариант. :)
Если не ошибаюсь по этой темке уже говорили, но договорились тока до таймаута. Наверняка ВинСоккетзнает, что синхронизация с удаленным клиентом нарушена, но почему-то не дает возможности узнать об этом своими Евентами... :(
Млин, если не ошибаюсь... что-то такое типа CheckConnectionбыло... надо посмотреть...
Jeck (2002-05-27 19:06:00) [3]Так самое смешное, что OnClientConnect срабатывает, а SendStream на клиенте не отправляет, пока не нажму дисконнект и сного коннект. Так и не просек в чем фишка 8(
Ладно, тогда такой вопрос. С клиентом разорволась связь, но инфа о нем остается, т.е. его connect[i]->Handle остается.
Для проверки, что связь не разорвана, я ставлю таймер на 15мин, он вызывает функцию которая шлет всем активным клиентам сообщение, если приходит ответ, то клиент активен иначе связь была некорректно прервана, и функция запускает другой таймер, сек на 15, в течении которых должен прийти ответ. Предложите, пожалуйста, другой способ проверки, что клиент активен, а не отвалился.
Song (2002-05-27 18:37:00) [4]Может просто не успевает сконнектиться сделай задержечку хотя TApplication.ProcessMessages, а лучше цикл по свойству Active пока True не будет.
Jeck (2002-05-27 18:10:00) [5]Да тут и код не нужен. Жмем кнопку коннект... Короче вызывается Start, при нажатии дисконнект вызывается Stop
__fastcall TCSocket::TCSocket(TNMClient *NMOwner)
: TAdapter(NMOwner)
{
pSocket = new TClientSocket(NULL);
pSocket->Active = false;
pSocket->ClientType = ctNonBlocking;
pSocket->Port = SOCKET_PORT;
pSocket->OnRead = Receive;
pSocket->OnError = Error;
}
//---------------------------------------------------------------------------
__fastcall TCSocket::~TCSocket()
{
delete pSocket;
}
//---------------------------------------------------------------------------
void __fastcall TCSocket::Start()
{
pSocket->Host = NMOwner->sServerName; //
if(!pSocket->Active)
pSocket->Active = true;
}
//---------------------------------------------------------------------------
void __fastcall TCSocket::Stop()
{
if(pSocket->Active)
pSocket->Active = false;}
//---------------------------------------------------------------------------
Просто не могу понять, почему SendStream отказывается отправлять.
Song (2002-05-27 17:52:00) [6]А вот это поподробней и с кодом "Потом сного приконнектились".