![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TServerSocket - как узнать что клиент до сих пор подключен
tm © (2003-07-21 11:37:00)Здраствуйте, помогите пожалуйста с сокетами.
Я использую тип stThreadBlocking. Сервер получает от клиента команду и выполняет ее. Ошибка происходит когда клиент закрывает свою программу не послав команды о завершении, а сервер продолжет слушать клиента. Пробовал использовать ClientSocket.Connected, но он не дает знать.
У меня в процедуре ClientExecute след. код:
var
ch: char;
...
MyStrm:=TWinSocketStream.Create(ClientSocket, 20000);
...
{ Ожидание команды от клиента }
repeat
while not MyStrm.WaitForData(500) do
( ch, 1)Здраствуйте, помогите пожалуйста с сокетами.
Я использую тип stThreadBlocking. Сервер получает от клиента команду и выполняет ее. Ошибка происходит когда клиент закрывает свою программу не послав команды о завершении, а сервер продолжет слушать клиента. Пробовал использовать ClientSocket.Connected, но он не дает знать.
У меня в процедуре ClientExecute след. код:
var
ch: char;
...
MyStrm:=TWinSocketStream.Create(ClientSocket, 20000);
...
{ Ожидание команды от клиента }
repeat
while not MyStrm.WaitForData(500) do
Application.ProcessMessages;
until MyStrm.Read(ch, 1)=1;
{ Обработка команды }
case ch of
#0: ... ;
#1: ... ;
...
#2: Выход;
...
Digitman (2003-07-21 15:12:00) [1]
если кл.приложение завершется нештатно (например, принудительное снятие кл.процесса с выполнения либо физ.разрыв соединения клиента с сетью), то обнаружить сей факт на стороне сервера можно только периодически посылая что-то клиенту - вызов любого из send-методов с любыми параметрами в этом случае :
- вызовет немедленное исключение;
- в non-blocking-режиме завершится нормально, но через некоторое время (~ 3 мин. по умолчанию) будет возбуждено событие OnClientError() с кодом ошибки, отражающим причину отказа