Текущий архив: 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.46 MB
Время: 0.006 c