Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.12.26;
Скачать: CL | DM;

Вниз

Сокеты   Найти похожие ветки 

 
VirginKiller ©   (2002-10-30 11:28) [0]

Есть два компонента: ClientSocket и ServerSocket. ServerSocket.ServerType = stThreadBlocking, у клиента тоже самое. Проблема в том, что при выполнении ClientSocket.Close (Active := False) в приложении клиенте цикл while (not terminated) and ClientSocket.Connected в ClientExecute процесса сервера продолжает выполняться, т.е. ClientSocket.Connected не реагирует на ручное отключение клиента. Как бы это можно было побороть?


 
Digitman ©   (2002-10-30 11:36) [1]

1. TClientSocket не имеет св-ва stThreadBlocking.
2. Тело ClientExecute() должно само устанавливать св-во ClientSocket.Connected = False при возникновении исключительных ситуаций , связанных с отказом трансаорта из-за разрыва соединения по инициативе клиента


 
virginkiller ©   (2002-10-30 12:08) [2]

1. Ну да, там просто stBlocking.
2. Хорошо, а как узнать, что клиент отсоединился, если в это время ничего не передается?


 
Digitman ©   (2002-10-30 12:29) [3]

А как вообще ты узнаешь, что "в это время" что-то "передается" ?


 
VirginKiller ©   (2002-10-30 12:58) [4]

:-) Хорошо. Рассмотрим ситуацию, которую я в начале описывал - тело ClientExecute имеет только цикл. Клиент подключился, процесс создался, все замечательно.. И клиент отключается. Как узнать, что он отключился?


 
Digitman ©   (2002-10-30 13:09) [5]

А зачем такой цикл нужен ? Пустой ?)
В нем должны быть вызовы различных транспортно-диспетчерских ф-ций гнезда сервера, ассоциированного с данным коннектом

Если коннект по каким-то причинам разорван, то ф-ции возвращают отказ, который и нужно анализировать, и по результатам анализа выполнять ClientSocket.Connected = False (если код отказа фиксирует факт невозможности дальнейшей работы с транспортным каналом)


 
VirginKiller ©   (2002-10-30 14:02) [6]

Понятно.. :-) Хорошо, а не подскажешь, как лучше решить проблему обмена информацией в оба направления одновременно. Я пока думаю, клиентом подключаться сразу двумя сокетами и при коннекте говорить, кто он такой и какой сокет для чего. Может, есть решение лучше, для меня эта тема вообще темный лес. :-)


 
Digitman ©   (2002-10-30 14:18) [7]


> клиентом подключаться сразу двумя сокетами


Ни к чему это. После того, как клиент и сервер достоверно установили соединение, в каждый момент времени кадый из них может являться как приемником, так и передатчиком сообщений (вне зависимости, кто из них кто).
Для передачи сообщений используются Send-методы объекта TCustomWinSocket, для приема - Receive-методы.


 
VirginKiller ©   (2002-10-30 14:33) [8]

Но могут ли они одновременно и посылать и принимать?


 
Digitman ©   (2002-10-30 14:45) [9]

Опять же - ни к чему это.
Достаточно установить асинхронный неблокирующий режим работы гнезда



Страницы: 1 вся ветка

Текущий архив: 2002.12.26;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.014 c
14-86103
dimich1978
2002-12-05 13:43
2002.12.26
Для тех кто любит интерфейс ХР


1-86020
Новичок
2002-12-16 15:08
2002.12.26
Ребята помогите! Срочно!!! Горю по курсовой!!!


14-86084
Феликс
2002-12-07 16:40
2002.12.26
Вопрос по прокси


1-85934
Viginal
2002-12-17 15:17
2002.12.26
Помогите!!!


1-85979
Socol
2002-12-15 02:10
2002.12.26
Нужна помошь с отслеживанием клавишь)))