![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Connect в TClientSocket
snake1977 © (2003-07-29 09:12:00)
Здравствуйте! Подскажите пожалуйста, я использую TClientSocket и TServerSocket. Вот кусок исходника:
Var ClientConnected:Boolean;
....
ClientConnected:=False;
Client1.Active:=True;
if Client1.Active Then ClientConnected:=True;
....
Проблема в том что условие никогда не выполняется, т.е. выполняется но со временем, т.е. приходится использовать что то типа While not Client1.Active do Application.ProcessMessages;
но тогда происходит зависание, если серверный сокет не активен.
Как проверить что клиент приконнектился к серверу?
Polevi (2003-07-30 15:17:00) [1]
Basilio © (29.07.03 19:11)
плохой код
Basilio (2003-07-29 19:11:00) [2]
Может прокатить такой код:
Client1.Active:=true;
while not Client1.Connected do Application.ProcessMessages;
> клиенту нужно время, чтобы сконнектится
Verg (2003-07-29 13:15:00) [3]
> Как проверить что клиент приконнектился к серверу?
В режиме по умолчанию используется nonBklocking или аснхронный режим работы с TClientSocket. Таким образом, Client1.Active:=True; только инициирует процесс соединения. А результат соединения получаешь обрабаотывая события OnError, OnWrite, OnDisconnect. Только после получения события OnWrite можно считать соединение состоявшимся.
Digitman (2003-07-29 09:21:00) [4]
> но тогда происходит зависание
какое такое "зависание" ?)
"зависание" ты получишь , если
Client1.Active:=False;
Client1.ClientType := ctBlocking;
Client1.Active:=True; // вот здесь и "повиснешь" до тех пор, пока не будет установлен коннект либо в нем тебе будет отказано